子进程可以 <defunct> 而父进程不死吗?

标签 c process signals freebsd defunct

kill - does it kill the process right away?

我找到了答案,并为 SIGCHLD 设置了一个信号处理程序,并在该处理程序中引入了 wait。这样,无论何时父进程kill 一个子进程,都会调用此处理程序并调用wait获取 子进程。 - 动机是清除进程表条目。

我仍然看到一些子进程运行了几秒钟,即使它的父进程没有死。 - 这怎么可能

我是通过 ps 看到的。精确地 ps -o user,pid,ppid,command -ax 和 greping 用于父进程、子进程和 defunct。

最佳答案

进程在退出时立即失效(僵尸)(从信号、调用 exit、从 main 返回,等等)。它会一直保持僵尸状态,直到它的父级等待

因此,所有进程在退出时至少会暂时变成僵尸。

如果父进程在调用 wait 之前需要一点时间(因为它正在做其他工作,或者只是因为调度程序还没有给它 CPU 时间),那么你会看到僵尸就一点点。如果父进程从不调用 wait,那么当它最终退出时,init (pid 1) 将收养它的僵尸子进程,并对它们调用 wait .

关于子进程可以 <defunct> 而父进程不死吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8481803/

相关文章:

security - 如何使用PowerShell获取进程的启动帐户?

windows - Windows 上的 PID 可以为负数吗?

c - epoll 事件不会引发 SIGIO

c - 什么时候/为什么使用 fscanf() 函数是个坏主意?

c - 移动数组的列

windows - 监控 Windows 中的进程

c - 从函数指针中减去 1

python - 信号处理鼠兔/ python

c++ - 程序不询问预期值的数量

c - C语言中delay()和sleep()的区别?