为什么我的处理程序在C中不给我退出状态?
目前我有这样的代码:为什么我的处理程序在C中不给我退出状态?,c,signals,fork,C,Signals,Fork,目前我有这样的代码: 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()) ==
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;
}
包括所有必要的头文件,如和
我假设在运行时至少会获得退出状态,但没有输出。为什么会这样?但是子进程没有退出,它们被杀死了。它们被一个信号终止。使用WIFSIGNALED检查进程是否被信号终止,使用WTERMSIG获取信号号
要退出进程,它必须从主函数返回,或者调用exit。谢谢。我想我会做更多的研究signals@Foo.Li如果答案有用,请投上一票如果它解决了您的问题,那么您应该接受它。有很多函数不应该在信号处理程序中调用,printf就是这样一个函数。