【问题标题】:Ensure PID refers to the correct process确保 PID 引用正确的进程
【发布时间】:2012-10-08 14:02:36
【问题描述】:

我fork()一个父进程给一个子进程,fork()返回的PID存入父进程的内存,然后时间过去,子进程终止;现在我可以确定存储在父内存中的 PID 值是否仍然指向同一个分叉的子进程,以及如何确保这个 PID 不会引用具有相同 PID 的不同进程,这些进程最终可能在子进程之后出生终止了吗?

【问题讨论】:

标签: c fork pid


【解决方案1】:

操作系统不能重用子进程的 PID,直到父进程确认它知道子进程已停止执行。

父母使用waitwaitpid 调用进行确认。终止的子进程保持在“僵尸”状态,而父进程不调用这些函数。在这些调用返回后,父进程将知道如果有一个进程以与子进程相同的 PID 运行,则它不是子进程。

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

【讨论】:

    【解决方案2】:

    你可以:

    • 在父母中拨打man 2 wait,在孩子死亡时得到通知;
    • 发明父母和孩子之间的轮询协议。如果孩子仍然是相同的,它必须以与产卵后相同的值响应父母的民意调查。您可以为此使用一些 POSIX IPC 机制。当您的父级只有一个执行线程并且您不能在父级中使用线程时,这会很有用。

    【讨论】:

      猜你喜欢
      • 2011-02-05
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      相关资源
      最近更新 更多