假设我出于某种原因决定不再wait
在我编写的任何程序中使用系统调用。
这是否意味着我的记忆中将充斥着他们父亲没有等待的所有已完成的流程?
这是学术作业的一部分,我发现这个问题有点令人困惑,因为这两个答案对我来说都是可以接受的。
这就是我回答这个问题的方式,如果确实如此,我只想得到反馈。
如果父进程在退出之前不等待其子进程 - 这些子进程将链接到父进程上调用(函数内部)的init
进程。 在某些时候,init 进程将容纳比其所能容纳的更多的进程 - 关于内存限制。 所以不打电话确实会扰乱内存。exit
forget_original_parent()
wait
另外,我想澄清一下在这种情况下会发生什么?机器是否关闭并退出init进程?如果是这种情况,init 的所有子进程会发生什么情况?
答案1
在某些时候,init 进程将容纳比其所能容纳的更多的进程 - 关于内存限制。
不完全是:僵尸进程(已退出但尚未被回收的进程)不占用其父进程的内存;它们占用内核进程表中的内存。
如果您init
是“标准” init
,无论如何它都会收获僵尸进程,并且您不会遇到任何问题。
如果您init
也忽略子进程,它仍然不会遇到可能导致其被终止的限制。发挥作用的主要限制是最大进程数;达到这个目标将阻止创建新进程,这将立即导致问题(进程不断被创建)。系统将继续运行,但您将无法登录,并且只能使用现有的 shell 等。