从进程表中删除僵尸进程

6 process process-management exit architecture zombie-process

有人可以解释一下父进程何时通过 收到死子进程的退出状态wait,谁实际上重新分配了子进程的内存并将其从进程表中删除?

Gil*_*il' 5

操作进程表和内存映射始终是内核的工作。当某个进程进行系统调用时,内核会起作用。当一个进程退出时,它使用的所有资源,包括内存,除了进程表中的条目,都被删除?这就是_exit系统调用所做的。然后,当父进程调用waitor 时waitpid,该系统调用的部分工作是清理进程表条目。父进程可以决定随时调用wait(如果父进程是init,它wait几乎一直都在调用)。


小智 4

内核假设父进程有兴趣了解它派生的任何子进程的结果。当子进程终止时,它会自动SIGCHLD向父进程发送信号。\xc2\xa0 如果父进程明确忽略该SIGCHLD信号,则子进程将立即被清理并完全删除(并且不会成为僵尸进程)。否则,孩子会变成僵尸,直到父母调用其中一个wait函数从子级检索终止状态。

\n\n

如果未检索到状态,孩子仍然是僵尸。但是,如果父进程在子进程之前退出,则子进程将被init(process\xc2\xa01) 采用,它会立即收集状态,从而有效地删除僵尸进程。

\n