System()调用返回255,但随后执行

System() call returns 255, but executes afterwards

本文关键字:执行 调用 返回 System      更新时间:2023-10-16

我在qnx系统上运行mongose 3.7服务器。

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

但是,奇怪的是,system()返回255。同样的调用以前也适用于猫鼬2.0。

更奇怪的是,我通过system()调用发出的命令在返回255之后仍然有效。

我正在使用WEXITSTATUS来了解system()返回的错误

知道为什么会发生这种事吗?

我发现了问题。。

问题是发出system()命令的mongoose回调线程不会等待返回状态,因为这一行:

在启动服务器线程的mg_start()函数中,他们包含了以下行:

mg_start()第5159行:

(void) signal(SIGCHLD, SIG_IGN);

他们这样做是为了不制造僵尸程序。

参考编号:http://www.win.tue.nl/~aeb/linux/lk/lk-5.html

但是,根据QNX文件,

"将挂起信号的信号操作设置为SIG_IGN导致挂起的信号被丢弃,无论它是否被阻止。如果进程将SIGCHLD信号的动作设置为SIG_IGN,行为未指定。"

在CCD_ 11上调用CCD_。

当我们进行system()调用时,它会阻止来自正在启动的shell的SIGCHLD信号。根据UNIX文档:

"在等待子进程终止时阻止SIGCHLD应用程序捕获信号并从中获取状态系统()在system()之前的子进程可以获得状态本身。"

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

它只是在没有来自system()的有效返回状态的情况下继续提供响应。

我只是暂时把这句话删掉了。它正在发挥作用。