arc*_*tic 2 c unix linux operating-system
退出状态和SIGCHLDLinux 之间有什么区别?
在孩子终止后,SIGCHLD会发送一个信号来激活父母(被阻止wait()),那么为什么我们需要孩子的退出状态?我找不到SIGCHLD和退出状态之间的联系.
退出状态由进程(通过调用exit)返回,以告诉其父进程是否成功。
当父进程调用wait或 时waitpid,它会收到退出状态(在 的情况下waitpid,是子进程的 pid)并且可以根据该值做出决定。
如果父SIGCHLD进程收到一个信号,则只能告诉进程它的一个子进程已完成。它不会向父进程提供有关子进程的 pid 或退出状态的任何信息。这是一种异步告诉父级该调用wait或 的方法waitpid。
子进程的退出状态是它通过exit()(或_exit())系统调用返回到父进程的值.这是一个简单的整数,通常表示子进程成功或失败,其中零表示成功(按照惯例).
SIGCHLD是子进程终止时发送给父进程的信号.它只是通知等待的父母孩子已经终止.
两者的组合用于将子进程的执行结果传递回其父进程.当孩子退出时,信号告诉父母,退出状态告诉父母孩子的执行结果是什么.在收到信号(或从wait()或返回waitpid())之前,父母无法检索孩子的退出状态,表明孩子已退出.
子进程可以通过多种方式将其执行结果传回给父进程(各种IPC机制,文件I/O等),但最简单的方法是使用exit()并将wait()整数状态代码从子进程发送到父进程.
如果父进程不关心子执行状态是什么,它可以简单地忽略从子进程返回的退出代码wait().另一方面,复杂的系统可能需要知道退出状态是什么,以便重新启动(fork())子进程的新实例,或者如果子进程执行(或没有)完成其执行,则可能执行其他程序.任务正常.