【发布时间】:2012-10-08 14:02:36
【问题描述】:
我fork()一个父进程给一个子进程,fork()返回的PID存入父进程的内存,然后时间过去,子进程终止;现在我可以确定存储在父内存中的 PID 值是否仍然指向同一个分叉的子进程,以及如何确保这个 PID 不会引用具有相同 PID 的不同进程,这些进程最终可能在子进程之后出生终止了吗?
【问题讨论】:
-
查看
waitpid函数。
我fork()一个父进程给一个子进程,fork()返回的PID存入父进程的内存,然后时间过去,子进程终止;现在我可以确定存储在父内存中的 PID 值是否仍然指向同一个分叉的子进程,以及如何确保这个 PID 不会引用具有相同 PID 的不同进程,这些进程最终可能在子进程之后出生终止了吗?
【问题讨论】:
waitpid函数。
操作系统不能重用子进程的 PID,直到父进程确认它知道子进程已停止执行。
父母使用wait 和waitpid 调用进行确认。终止的子进程保持在“僵尸”状态,而父进程不调用这些函数。在这些调用返回后,父进程将知道如果有一个进程以与子进程相同的 PID 运行,则它不是子进程。
为了更加安全,您可能对checking the parent PID of the child process 感兴趣。
【讨论】:
你可以:
man 2 wait,在孩子死亡时得到通知;【讨论】: