关于流程生命周期的问题

关于流程生命周期的问题

我已经设法问自己关于wait(2)_exit(2)进程生命周期中的系统调用。

我关于系统调用的问题wait(2)是......父进程是否将其发送给内核?还是内核将其发布给父进程?还有[ _exit(2)]系统调用问题是从子进程到父进程的吗?或者子进程是否_exit(2)向内核发出[ ]?

我尝试谷歌搜索和观看 YouTube 视频来寻找答案......但我从未看到任何具体的内容。

答案1

系统调用总是由进程对内核进行。

所以回答具体问题。

  1. 父进程调用wait内核。
  2. 子进程调用exit内核。

以下是所发生情况的简化视图。

当进程调用时,exit内核将参数(return code)存储在内部进程表中,销毁与该进程关联的所有其他资源(分配的内存、打开的文件描述符)并将该进程标记为zombie.

当父进程调用内核时,wait内核会检查是否有任何子进程处于zombie状态。如果是这样,那么它return code从内部进程表中获取存储的内容,释放表中的槽并从wait系统调用中返回,传回return code.如果子进程未处于zombie状态,则内核会阻塞父进程,直到子进程调用exit

当任何进程调用时exit,任何剩余的子进程都将reparented指向 PID 为 1 的进程,因此除第一个进程之外的所有进程始终都有一个父进程。

PID 1 启动一切运行(网络服务、串行线路上的侦听器、GUI 登录程序),然后进入无限循环调用,wait这样内核进程表就不会被僵尸填满。

有一个很多我已经简化了一些事情,现在您可以要求内核将进程重新设置为进程号 1 以外的进程副收割者,调用的形式有很多种wait(wait、waitid、waitpid、wait3、wait4(手册页),与交互跟踪系统调用,破坏分配的资源意味着什么等等。

相关内容