linux - init 的僵尸 child

标签 linux process kernel init zombie-process

僵尸进程如何成为init的子进程?难道 init 不应该在它的所有 child 上等待 waitpid 吗?

我偶尔会遇到父级为 init 的僵尸进程。该理论说,当进程死亡时,它会保持僵尸状态,直到它的父 wait 或 waitpid 在它上面。如果父进程已死,则进程会被 init 采用并进行等待。

我现在正在看这样的过程。我用 strace 附加到 init。我确实看到 init 偶尔醒来并且 waitpid 在其子进程上。但是我确实看到它跳过了它的僵尸 child 。我想知道这怎么可能。有什么想法吗?

最佳答案

我们可以对 waitpid() 有不同的实现。 如果内核以忽略僵尸线程的方式设计,那么 init 可能会跳过其僵尸线程并在后期清理其数据结构。

更多细节可以引用waitpid()的man page

http://man7.org/linux/man-pages/man2/wait.2.html

关于linux - init 的僵尸 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29346109/

相关文章:

c - 我的信号处理程序示例不工作

php - Ubuntu(一般是linux)如何更改后台进程的名称?

x86 - 操作系统的引导加载程序不起作用

java - 无法使用 launch4j 重命名进程/图像名称

bash - 如何杀死一个nohup进程?

linux-kernel - 不同进程的相同虚拟地址如何映射到不同的物理地址

linux - Fedora Core 中 rc.local 中错误的 insmod 如何拯救 Linux 系统?

linux - 如何将无限 nc (netcat-openbsd) 作业添加为 crontab -e 命令以运行 @restart?

c - 共享内存错误 : shmat return NULL , errno(22 :Invalid argument) in CentOS6. 8

python - 在/usr/bin/python2.7上使用setcap不给子任务提供权限