为什么我的处理程序不给我C中的退出状态?

时间:2017-03-10 18:31:33

标签: 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()) == 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>

我假设我在运行时至少会获得退出状态,但没有输出。那是为什么?

1 个答案:

答案 0 :(得分:1)

但是孩子不会退出,他们会被杀死。它们被信号终止。使用WIFSIGNALED检查进程是否被信号杀死,使用WTERMSIG获取信号编号。

进入&#34;退出&#34;它必须从main函数返回,或者调用exit