[英]wait() SIGCHLD and the exit status
Linux中的退出状态和SIGCHLD
什么区别?
在子节点终止后,发送SIGCHLD
信号以激活父节点(由wait()
阻止),那么为什么我们需要子节点的退出状态? 我找不到SIGCHLD
和退出状态之间的链接。
子进程的退出状态是它通过exit()
(或_exit()
)系统调用返回到父进程的值。 这是一个简单的整数,通常表示子进程成功或失败,其中零表示成功(按照惯例)。
SIGCHLD是子进程终止时发送给父进程的信号。 它只是通知等待的父母孩子已经终止。
两者的组合用于将子进程的执行结果传递回其父进程。 当孩子退出时,信号告诉父母,退出状态告诉父母孩子的执行结果是什么。 在收到信号(或者从wait()
或waitpid()
返回wait()
之前,父母无法检索孩子的退出状态,表明孩子已退出。
子进程可以通过多种方式将其执行结果传回给父进程(各种IPC机制,文件I / O等),但最简单的方法是使用exit()
和wait()
从子进程发送整数状态代码家长。
如果父进程不关心子执行状态是什么,它可以简单地忽略从wait()
返回的子进程的退出代码。 另一方面,复杂的系统可能需要知道退出状态是什么,以便重新启动( fork()
)子进程的新实例,或者如果子进程执行(或者没有),则可能执行其他程序。 )正确完成任务。
退出状态由进程返回(通过调用exit
)以告知其父进程是否成功。
当父进程调用wait
或waitpid
,它会收到退出状态(在waitpid
的情况下,是子进程的pid)并可以根据该值做出决策。
如果父节点收到SIGCHLD
信号,则告诉进程的所有内容都是其子进程之一完成的。 它不会向父母提供有关孩子的pid或退出状态的任何信息。 这是一种异步告诉父节点是时候调用wait
或waitpid
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.