首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wait() SIGCHLD和退出状态

wait() SIGCHLD和退出状态
EN

Stack Overflow用户
提问于 2017-01-10 05:24:22
回答 2查看 4.8K关注 0票数 2

退出状态和Linux下的SIGCHLD有什么区别?

子进程终止后,会发送一个SIGCHLD信号来激活父进程(被wait()阻止),那么为什么我们需要子进程的退出状态呢?我找不到SIGCHLD和退出状态之间的链接。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-10 05:37:54

子进程的退出状态是它通过exit() (或_exit())系统调用返回给父进程的值。这是一个简单的整数,通常指示子进程的成功或失败,其中零表示成功(按照惯例)。

SIGCHLD是当子进程终止时发送给父进程的信号。它只是通知正在等待的父进程该子进程已经终止。

这两者的组合用于将子进程的执行结果传回其父进程。该信号告诉父进程子进程何时退出,退出状态告诉父进程子进程的执行结果是什么。父级在收到指示该子进程已退出的信号(或从wait()waitpid()返回)之前,无法检索子进程的退出状态。

子进程可以通过多种方式(各种进程间通信机制、文件I/O等)将其执行结果传回父进程,但最简单的方法是使用exit()wait()从子进程向父进程发送一个整数状态码。

如果父进程不关心子进程的执行状态,它可以简单地忽略从wait()返回的子进程的退出代码。另一方面,复杂系统可能需要知道退出状态是什么,以便重新启动(fork())子进程的新实例,或者如果子进程没有(或没有)正确地完成其任务,则可能需要执行一些其他程序。

票数 7
EN

Stack Overflow用户

发布于 2017-01-10 05:31:39

退出状态由进程返回(通过调用exit),以告知其父进程是否成功。

当父进程调用waitwaitpid时,它将接收该退出状态(对于waitpid,该子进程的pid),并可以根据该值做出决策。

如果父进程接收到SIGCHLD信号,那么告诉该进程的就是它的一个子进程完成了。它不会向父进程提供有关子进程的pid或退出状态的任何信息。这是一种异步地告诉父级是时候调用waitwaitpid的方法。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41557201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档