我在我的qnx系统上运行mongoose 3.7服务器。系统()调用返回255,但之后执行
我收到http请求以升级固件。根据请求,我使用请求处理程序中的system()
调用来升级固件。
但奇怪的是,system()
返回255.与猫鼬2.0相同的调用工作。
更为奇怪的,这是我通过电话system()
作品发出它我使用WEXITSTATUS
知道哪些system()
回报
任何想法,为什么这种情况正在发生错误返回255
之后的命令?
我在我的qnx系统上运行mongoose 3.7服务器。系统()调用返回255,但之后执行
我收到http请求以升级固件。根据请求,我使用请求处理程序中的system()
调用来升级固件。
但奇怪的是,system()
返回255.与猫鼬2.0相同的调用工作。
更为奇怪的,这是我通过电话system()
作品发出它我使用WEXITSTATUS
知道哪些system()
回报
任何想法,为什么这种情况正在发生错误返回255
之后的命令?
我发现这个问题..
的问题是,猫鼬回电螺纹,其发出系统()命令不会等待返回状态监守这行:
在mg_start( )功能,启动服务器线程,他们已包括这一行:
mg_start()
行没有5159:
(void) signal(SIGCHLD, SIG_IGN);
他们^ h大声这样做,以便不创建僵尸进程。
编号:http://www.win.tue.nl/~aeb/linux/lk/lk-5.html
不过,据QNX文件,
“设置为有待批 导致挂起的信号的信号的信号动作
SIG_IGN
被丢弃,它是否是 被屏蔽。如果一个进程设置为SIGCHLD
信号的动作SIG_IGN
,行为是不确定的。”
呼吁SIG_IGN
上SIGCHLD
导致父进程忽略孩子的状态信号。
当我们调用system()
调用时,它会阻止来自正在启动的shell的SIGCHLD信号。根据UNIX文件:“阻止SIGCHLD
在等待孩子终止防止 从捕获的信号和来自 系统获取状态()的子进程system()
之前可以得到状态本身的应用”
但是,由于猫鼬舍弃了信号,所以它根本不等待来自system()
的信号。
它只是继续提供没有从system()
有效返回状态的响应。
我刚才注释掉了这一行。它正在工作。