在Linux中获取父进程状态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Linux中获取父进程状态相关的知识,希望对你有一定的参考价值。

试图从其子节点P'获取给定进程P的进程状态。

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

那么还有其他方法吗?

答案

没有标准函数可以让进程等待其父进程终止或获取其父进程的退出状态。进程树不会那样工作 - 孩子们退出时会通知他们的父母,而不是相反。

因此,如果您希望子进程了解其父母的死亡,您必须安排父母主动通知他们。这似乎是一个信号工作。如果您只需告知孩子​​父母干净利落(即从main()回来或致电exit()),那么这本身就足够了。选择一个信号 - 可能是SIGUSR1SIGUSR2 - 并让父母注册一个atexit()处理程序,将该信号发送给孩子们。这可能会或可能不会要求父母跟踪其子女。

因为你提到获得父母的退出状态,你可能想要更多一点。您可以通过选择要发送给他们的两个(或更多)信号中的哪一个来向孩子们获取粗粒度信息,但是对于更详细的信息,您需要IPC机制。您可以将退出状态写入共享内存或管道(或其中的几个),将消息发送到套接字或消息队列,将状态写入普通文件,或者可能是我未想到的其他内容。

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

以上是关于在Linux中获取父进程状态的主要内容,如果未能解决你的问题,请参考以下文章

Linux进程概念

linux应用中,在一个进程内如何获取本进程内其它线程的堆栈信息、

如何在通过exec调用的父进程中获取已执行应用程序的状态?

僵尸进程与孤儿进程

linux系统编程:进程控制(fork)

linux僵尸进程产生的原因以及如何避免产生僵尸进程