确保PID指的是正确的过程

时间:2012-10-18 07:17:31

标签: c fork pid

我将父进程fork()给子进程,fork()返回的PID存储在父进程的内存中,然后时间过去,子进程终止;现在我可以确定存储在父存储器中的PID值是否仍然引用相同的分叉子节点,并且如何确保此PID不会引用具有相同PID的不同进程,这可能最终在子节点之后生成终止?

2 个答案:

答案 0 :(得分:3)

操作系统不能重复使用子PID,直到父级确认知道孩子已经停止执行为止。

家长使用waitwaitpid来电进行确认。终止的子节点保持“僵尸”状态,而父节点不调用这些功能。在这些调用返回之后,父进程将知道如果进程运行时具有与该进程相同的PID,则不是该进程。

为了更加安全,您可能会对checking the parent PID of the child process感兴趣。

答案 1 :(得分:1)

你可以:

  • 在父母中致电man 2 wait,以便在孩子死亡时获得通知;
  • 在父母和孩子之间发明您的民意调查协议。如果孩子仍然相同,它必须以与产生后相同的值响应父母的民意调查。您可以使用一些POSIX IPC机制。当父级只有一个执行线程而你不能在父级中使用线程时,这非常有用。