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

标签 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>

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

最佳答案

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

要让进程“退出”,它必须从 main 函数返回,或者调用 exit

关于c - 为什么我的处理程序不给我 C 中的退出状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42725421/

相关文章:

c - c中结构指针的范围?

c - 为什么在 Ubuntu 14.10 中需要按 CTRL+D 两次才能突破 `while ((c=getchar())!=EOF)`?

Git_GitHub Fork only master branch of a repo

c - 在C中的行尾添加字符

c - 读取和解析之间的区别

linux - 让 child 在 fork() 中等待 parent

linux - 可以使用 trap 命令检测

c - cd插入C时发出信号

c - 使用 C (linux) 将进程记录并写入文件

c - Pipe() fork() 和 exec