nj-*_*ath 64
好的,现在首先:什么是僵尸进程?
这是一个已经死亡的过程,但是它的父母忙于做其他一些工作,因此它无法收集孩子的退出状态.
在某些情况下,孩子跑了很长时间,父母不能等那么久,并且会继续工作(注意父母不会死,但继续其余的任务,但不关心孩子).
通过这种方式,创建了一个僵尸进程.
现在让我们开始做生意吧.如何在这里分叉两次?
需要注意的重要一点是,孙子进行父进程希望其子进行的工作.
现在第一次调用fork时,第一个孩子只是再次分叉并退出.这样,父母不必等待很长时间来收集孩子的退出状态(因为孩子唯一的工作就是创建另一个孩子并退出).所以,第一个孩子不会变成僵尸.
至于孙子,其父母已经去世了.因此,该init过程将采用孙子,该过程总是收集其所有子过程的退出状态.所以,现在父母不必等待很长时间,也不会创建任何僵尸进程.
还有其他方法可以避免僵尸进程; 这只是一种常见的技术.
希望这可以帮助!
siz*_*erz 22
在Linux中,守护进程通常是通过在分叉孙子后退出中间进程两次来创建的.这具有孤立孙子过程的效果.因此,如果操作系统终止,它将成为操作系统的责任.原因与所谓的僵尸进程有关,这些僵尸进程在退出后继续生存和消耗资源,因为他们的父母通常负责清理,也已经死亡.