Bod*_*sha 2 process system-calls exit wait
我已经设法对流程生命周期中的系统调用wait(2)
和_exit(2)
系统调用进行了质疑。
我关于wait(2)
系统调用的问题是......父进程是否将它发布给内核?还是内核将其发布给父进程?并且是_exit(2)
从子进程到父进程的 [ ] 系统调用问题吗?还是子进程_exit(2)
向内核发出 [ ] ?
我尝试谷歌搜索并观看 youtube 视频以获得答案......但我从未看到任何特定于此的东西。
系统调用总是由进程对内核进行。
所以要回答具体问题。
wait
调用内核。exit
调用内核。以下是对所发生情况的简化视图。
当进程调用exit
内核时,将参数 (the return code
)存储在内部进程表中,销毁与该进程关联的所有其他资源(分配的内存、打开的文件描述符)并将进程标记为zombie
.
当父进程调用wait
内核时,内核会检查是否有子进程处于zombie
状态。如果是,那么它return code
从内部进程表中获取存储,释放表中的槽并从wait
系统调用返回return code
. 如果子zombie
进程不在状态,则内核会阻塞父进程,直到子进程调用exit
.
当任何进程调用时,exit
任何剩余的子进程都reparented
将指向 PID 为 1 的进程,因此除第一个进程之外的所有进程总是有一个父进程。
PID 1 启动所有运行(网络服务、串行线路上的侦听器、gui 登录程序),然后进入无限循环调用,wait
因此内核进程表不会被僵尸填满。
我简化了很多事情,这些天你可以要求内核重新父进程而不是进程号 1 a subreaper,有很多wait
调用形式(wait、waitid、waitpid、wait3、wait4(man pages),与ptrace系统调用的交互,销毁分配的资源意味着什么等。