【发布时间】:2021-04-13 03:30:44
【问题描述】:
当谈到开始一个新进程时,你可以使用int system(char* command)。如果你传递一个非NULL参数,你可以得到:
-
-1如果子进程无法启动; - 否则为子进程的返回码;
注意:在 Unix/Linux 中,返回码位于 结果的高八位,而低八位包含终止原因代码>{1}
在WEXITSTATUS() 中搜索the implementation 是向右移位8 位。
#define WEXITSTATUS(x) (_W_INT(x) >> 8)
这就是为什么我倾向于认为返回码是 2 个字节(也来自 >{1}
P.s 我想知道返回码和终止原因码的区别,不都一样吗?
【问题讨论】:
-
适用于什么操作系统?符合 POSIX 标准?
-
“在线找到的 C 课程”。谨慎对待这些事情。
int system(char* command)运行一个可执行程序,而不是“C/C++ 应用程序”(无论这意味着什么)。返回码不依赖于用于编写所述程序的语言。 -
终止原因码:进程是自行退出,还是被信号杀死?在后一种情况下,由于希望显而易见的原因,它没有返回代码,但您可以找出是什么信号负责,以及是否进行了核心转储。
-
@πάνταῥεῖ ,DWORD 在 Windows 中是无符号的,这意味着它仍然不能有负值。或者我做了read wrong?
-
您应该使用
#include <sys/wait.h>定义的宏来从状态中提取信息,而不是通过您自己的代码进行位移。WEXITSTATUS(x)提取的退出代码仅在WIFEXITED(x)非零时有效。同样,WTERMSIG(x)仅在WIFSIGNALED(x)不为零时才有效。
标签: c++ c operating-system