System()调用返回255,但随后执行
System() call returns 255, but executes afterwards
我在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()
的有效返回状态的情况下继续提供响应。
我只是暂时把这句话删掉了。它正在发挥作用。
相关文章:
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 为什么即使调用了析构函数,C++11 中的分离线程也可以执行
- 无法调用成员函数,尝试正确执行此操作仍然失败
- 不执行任何操作的函数调用C++
- 在 c++ 托管和异步运行中调用 c# 可执行文件
- 调用函数一次用于动态链接库,一次从可执行文件调用函数
- 如何执行参数化构造函数的调用?
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 在可变函数调用中执行一次语句
- 如何在派生类中不显式调用base::func()的情况下从基类执行虚拟函数
- 只有一个可执行文件即可进行跨平台 SIMD 调用?
- 调用函数来创建 WinAPI 按钮不会执行任何操作
- 从 PHP 调用已编译的C++可执行文件来创建套接字
- 如何让派生类在调用基类之前执行操作?
- 在 MySQL 连接器C++ API 中使用一个函数调用执行多个查询的正确方法是什么?
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- 仅执行一次函数一次内部循环,该循环在每个0.1秒C 处都被调用
- 如何测试基类中的方法是否已使用谷歌模拟调用和执行?
- 编译器是否对所有内联函数调用执行相同的操作
- 动态执行的 ARM ASM 系统调用,可从C++重新定位