C 如何无害地杀死孩子

C 如何无害地杀死孩子,c,linux,race-condition,C,Linux,Race Condition,父进程分叉并获取子进程id。子进程执行一些操作。若它在1秒后并没有完成,那个么父进程会按id终止它。但若子进程在1秒之前完成,并且系统使用和我的子进程相同的id执行另一个进程,那个该怎么办呢。在这种情况下,父进程将杀死无辜进程。如何避免这种情况?PID被保留,直到wait(或类似的函数,如waitpid)通知父进程已退出 如果进程已退出,但您尚未通过wait通知父进程,则该进程称为“僵尸” 因此,您的家长只需小心,不要在wait告诉它子进程已完成后发送任何信号。这应该很容易。不涉及任何比赛条件

父进程分叉并获取子进程id。子进程执行一些操作。若它在1秒后并没有完成,那个么父进程会按id终止它。但若子进程在1秒之前完成,并且系统使用和我的子进程相同的id执行另一个进程,那个该怎么办呢。在这种情况下,父进程将杀死无辜进程。如何避免这种情况?

PID被保留,直到
wait
(或类似的函数,如
waitpid
)通知父进程已退出

如果进程已退出,但您尚未通过
wait
通知父进程,则该进程称为“僵尸”

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

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