在 Linux 中获取父进程状态

Get parent process status in Linux

正在尝试从其子进程 P' 之一获取给定进程 P 的进程状态。

我知道 waitpid() 函数,但在文档中,它说它用于检查子进程的状态。

那么还有其他方法吗?

没有标准函数可以让进程等待其 parent 终止或获取其 parent 的退出状态。进程树不是那样工作的——children 在他们退出时通知他们的 parents,而不是相反。

因此,如果您希望 child 进程获悉其 parent 的死亡,您必须安排 parent 主动通知它们。这似乎是一个信号传递的工作。如果您只需要通知 children parent 完全退出(即从 main() 返回或调用 exit()),那么这本身就足够了。选择一个信号——可能是 SIGUSR1SIGUSR2——并让 parent 注册一个 atexit() 处理程序,该处理程序将那个信号发送到 children。这可能需要也可能不需要 parent 来跟踪其 children。

尽管您提到获得 parent 的退出状态,但您可能还想要更多。您可以通过选择将两个(或更多)信号中的哪一个发送给 children 来获取 coarse-grained 信息,但是要获得更详细的信息,您需要一个 IPC 机制。您可以将退出状态写入共享内存或管道(或其中的几个),将消息发送到套接字或消息队列,将状态写入普通文件,或者可能是我没有想到的其他内容。

您还应该考虑到现有模型运行良好,并且已经运行了 40 年左右。它可能确实不能满足您的需求,但我敦促您考虑是否可以改进您的设计以更干净地适应 Unix 模型。