当前位置: 技术问答>linux和unix
(紧急求助)后台运行程序出错
来源: 互联网 发布时间:2016-08-10
本文导语: 程序直接在前台运行没有错误,也能得到预期的结果,但是让它在后台运行时就出错了,具体表现为:程序阻塞。 该程序是一个多进程socket程序,父进程侦听接受客户端连接,子进程做一些数据接受、处理、发送等...
程序直接在前台运行没有错误,也能得到预期的结果,但是让它在后台运行时就出错了,具体表现为:程序阻塞。
该程序是一个多进程socket程序,父进程侦听接受客户端连接,子进程做一些数据接受、处理、发送等工作,并且在
子进程中又调用了system()函数来执行一些shell指令。
程序阻塞的表现为:在执行完system()指定的shell指令后就阻塞了
怎么回事啊?该怎么解决?(程序直接在前台运行没有错误!!!!)
该程序是一个多进程socket程序,父进程侦听接受客户端连接,子进程做一些数据接受、处理、发送等工作,并且在
子进程中又调用了system()函数来执行一些shell指令。
程序阻塞的表现为:在执行完system()指定的shell指令后就阻塞了
怎么回事啊?该怎么解决?(程序直接在前台运行没有错误!!!!)
|
你执行的shell指令有没有使用终端?如果使用终端的话,在前台跑是没问题的
在后台就会被挂起。
由于shell指令无法执行完成,所以你的程序阻塞在system()函数。
在后台就会被挂起。
由于shell指令无法执行完成,所以你的程序阻塞在system()函数。
|
int system(const char * string);
system() 会调用fork()产生子进程,由子进程来调用/bin/sh string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
system() 会调用fork()产生子进程,由子进程来调用/bin/sh string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
|
这是一个奇怪的问题,
前台与后台运行程序的差别是什么?
前台与后台运行程序的差别是什么?
|
看看是执行shell的时候阻塞了吗