尝试从其子节点P'中获取给定进程P的进程状态。
我知道函数waitpid(),但是在doc中,它说它用于检查子进程的状态。
还有其他方法吗?
答案 0 :(得分:2)
没有标准函数可以让进程等待其父进程终止或获取其父进程的退出状态。进程树不会那样工作 - 孩子在退出时会通知他们的父母,而不是相反。
因此,如果您希望子进程了解其父母的死亡,您必须安排父母主动通知他们。这似乎是一个信号工作。如果您只需要告知孩子父母干净地退出(即从main()
返回或致电exit()
),那么这本身就足够了。选择一个信号 - 可能是SIGUSR1
或SIGUSR2
- 让父母注册一个atexit()
处理程序,将该信号发送给孩子。这可能会或可能不会要求父母跟踪其子女。
因为你提到获得父母的退出状态,你可能想要更多一点。您可以通过选择要发送给他们的两个(或更多)信号中的哪一个来向孩子们获取粗粒度信息,但是对于更详细的信息,您需要IPC机制。您可以将退出状态写入共享内存或管道(或其中的几个),将消息发送到套接字或消息队列,将状态写入普通文件,或者可能是我未想到的其他内容。
您还应该考虑现有模型运行良好,并且已经完成了40多年。它可能确实不能满足您的需求,但我建议您考虑一下您的设计是否可以改进以更适合Unix模型。