为什么我的处理程序在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就是这样一个函数。