繁体   English   中英

wait()SIGCHLD和退出状态

[英]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 )以告知其父进程是否成功。

当父进程调用waitwaitpid ,它会收到退出状态(在waitpid的情况下,是子进程的pid)并可以根据该值做出决策。

如果父节点收到SIGCHLD信号,则告诉进程的所有内容都是其子进程之一完成的。 它不会向父母提供有关孩子的pid或退出状态的任何信息。 这是一种异步告诉父节点是时候调用waitwaitpid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM