如何无害地杀死子进程

问题描述 投票:4回答:1

父进程派生并获取子代ID。孩子做一些东西。如果它在1秒后没有完成,则父母将其ID杀死。但是,如果孩子在1秒钟之前已经完成,并且系统执行了另一个与我的孩子具有相同ID的进程,该怎么办?在这种情况下,父母会杀死无辜的过程。如何避免这种情况?

c linux race-condition
1个回答
4
投票

wait(或类似功能,例如waitpid)告诉父进程已退出之前,将保留PID。

如果该过程已退出,但wait尚未通知您的父母,则该过程称为“僵尸”。 Nothing happens when you kill a zombie process

因此,您的父母只需要小心,不要在wait告知子进程完成后再发送任何信号。这应该很容易。不涉及比赛条件。

注意:这也意味着您需要在生成子进程之后调用wait(或相关函数,例如waitpid)。另外,如果您的进程退出了,那么它创建的僵尸进程也会消失(因为它们被PID 1所“采用”,它称为wait。)>

© www.soinside.com 2019 - 2024. All rights reserved.