我 fork() 一个父进程给一个子进程,fork() 返回的 PID 存储在父进程的内存中,然后时间过去,子进程终止;现在我可以确定存储在父内存中的 PID 值是否仍然指向同一个分叉的子进程,以及如何确保这个 PID 不会引用具有相同 PID 的不同进程,这些进程最终可能在子进程之后出生终止?
问问题
122 次
2 回答
3
在父进程确认它知道子进程已停止执行之前,操作系统不能重用子进程的 PID。
父级使用wait
andwaitpid
调用进行确认。终止的子进程保持在“僵尸”状态,而父进程不调用这些函数。在这些调用返回后,父进程将知道如果有一个进程以与子进程相同的 PID 运行,则它不是子进程。
为了额外的安全,您可能有兴趣检查子进程的父 PID。
于 2012-10-18T07:26:32.897 回答
1
你可以:
- 打电话给
man 2 wait
父母,在孩子去世时得到通知; - 发明父母和孩子之间的轮询协议。如果孩子仍然是相同的,它必须以与产卵后相同的值响应父母的民意调查。您可以为此使用一些 POSIX IPC 机制。当您的父级只有一个执行线程并且您不能在父级中使用线程时,这可能很有用。
于 2012-10-18T07:22:06.747 回答