用于非子pid的c++信号监听器

C++ signal listener for non-child pid

本文关键字:c++ 信号 监听器 pid 用于      更新时间:2023-10-16

我正在使用c++,我需要SIGCHLD的等量物用于我知道的进程(即我知道它是pid),但没有生成。

是否有一个良好的设计模式来监听/观察/监控另一个进程的生命周期,当它不是你的孩子或在你的组或会话?

编辑:我特别想知道异常终止(即segfault,信号等)。我想窃听相关进程接收到的信号

我不知道它是否遵循特定的模式,本身,但是一种技术是让进程建立与监视器的连接。监视程序监视连接,当它关闭时,它知道进程已经关闭。

如果监视程序想知道被监视的进程是否响应,您可以使用连接来监视进程必须提供的心跳消息。

如果监视程序想知道被监视的进程是否取得进展,心跳消息可以提供状态信息,使监视程序能够监视该进程。

不同的操作系统可能提供不同的方法来实现相同的目标。例如,在Linux上,监视程序可以使用inotify监视该进程的/proc条目,以确定该进程是启动还是关闭。BSD kqueue具有类似的能力。进程可以将其心跳/状态导出到共享内存中,并且监视器可以在信号量上使用定时等待来查看数据是否正在更新。

如果进程是第三方程序,并且源代码不可用,那么您将不得不求助于类似于inotify/kqueue的方法,或者作为最后的手段,轮询内核状态(类似于top实用程序的工作方式)。