我不处理SIGCHLD
在我的代码中。我的进程仍然在终止后立即被删除。我希望它成为僵尸进程。
如果我设置SIGCHLD
to SIG_DFL
那么,它会起作用吗?我该如何设置SIGCHLD
to SIG_DFL
?
我希望进程成为僵尸,这样我就可以在之后读取父级中的子级状态waitpid
.
从你的问题历史来看,你似乎为此陷入了困境。以下是其工作原理的概述:
SIGCHLD 的默认处理是忽略。换句话说,如果你什么都不做,signal被忽略,但僵尸存在于进程表中。这就是为什么你可以wait
孩子死后的任何时候都可以。
如果您设置了一个信号处理程序,那么信号将被传递,您可以根据需要获取它,但(前)孩子在它死亡和您获取它的时间之间仍然是僵尸。
If you manually将 SIGCHLD 的处置设置为 SIG_IGN 通过signal
那么语义与第 1 项中的稍有不同。当您手动设置此配置时,操作系统会在子进程死亡时立即将其从进程表中删除,并且执行以下操作:not创造一个僵尸。因此,不再有任何状态信息可供获取和wait
ECHILD 会失败。 (2.6.9 之后的 Linux 内核遵循此行为。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)