目前我有这样的代码:
void handler(int sig) {
int stat;
wait(&stat);
if (WIFEXITED(stat))
printf("%d", WEXITSTATUS(stat));
}
int main() {
int i;
pid_t pids[5];
signal(SIGCHLD, handler);
for (i=0; i<5; i++)
if ((pids[i] = fork()) == 0) {
printf("1");
while (1) ; /* inf loop */
}
for (i=0; i<5; i++)
kill(pids[i], SIGKILL);
sleep(1);
return 2;
}
包含所有必需的头文件,例如 <signal.h>
和<stdlib.h>
我假设运行时至少会得到退出状态,但没有输出。这是为什么?
最佳答案
但是子进程不会退出,它们被杀死。它们由信号终止。使用 WIFSIGNALED
检查进程是否被信号终止,并使用 WTERMSIG
获取信号编号。
要让进程“退出”,它必须从 main
函数返回,或者调用 exit
。
关于c - 为什么我的处理程序不给我 C 中的退出状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42725421/