2013-08-19 46 views
2

我在我的qnx系统上运行mongoose 3.7服务器。系统()调用返回255,但之后执行

我收到http请求以升级固件。根据请求,我使用请求处理程序中的system()调用来升级固件。

但奇怪的是,system()返回255.与猫鼬2.0相同的调用工作。

更为奇怪的,这是我通过电话system()作品发出它我使用WEXITSTATUS知道哪些system()回报

任何想法,为什么这种情况正在发生错误返回255

之后的命令?

回答

3

我发现这个问题..

的问题是,猫鼬回电螺纹,其发出系统()命令不会等待返回状态监守这行:

在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_IGNSIGCHLD导致父进程忽略孩子的状态信号。

当我们调用system()调用时,它会阻止来自正在启动的shell的SIGCHLD信号。根据UNIX文件:“阻止SIGCHLD在等待孩子终止防止 从捕获的信号和来自 系统获取状态()的子进程system()之前可以得到状态本身的应用”

但是,由于猫鼬舍弃了信号,所以它根本不等待来自system()的信号。

它只是继续提供没有从system()有效返回状态的响应。

我刚才注释掉了这一行。它正在工作。

相关问题