我正在使用 C++,对于我知道的进程(即我知道它是 pid),我需要 SIGCHLD 的等价物,但没有产生。
当不是您的孩子或在您的小组或会话中时,是否有一个完善的设计模式来监听/观察/监控另一个进程的生命周期?
编辑:我特别想知道异常终止(即段故障、信号等......)。我想窃听相关进程收到的信号。
我正在使用 C++,对于我知道的进程(即我知道它是 pid),我需要 SIGCHLD 的等价物,但没有产生。
当不是您的孩子或在您的小组或会话中时,是否有一个完善的设计模式来监听/观察/监控另一个进程的生命周期?
编辑:我特别想知道异常终止(即段故障、信号等......)。我想窃听相关进程收到的信号。
我不知道它本身是否遵循特定模式,但一种技术是让进程与观察者建立连接。观察者监视连接,当它关闭时,它知道进程已关闭。
如果观察者想知道被观察的进程是否有响应,您可以使用连接来监视该进程必须提供的心跳消息。
如果观察者想知道被观察的进程是否正在取得进展,心跳消息可以提供允许观察者监控的状态信息。
不同的操作系统可能会提供不同的方式来实现相同的目标。例如,在 Linux 上,观察者可以inotify
用来监视该进程的/proc
条目以确定该进程是启动还是关闭。BSDkqueue
具有类似的能力。该进程可以将其心跳/状态导出到共享内存中,并且观察者可以在信号量上使用定时等待来查看数据是否正在更新。
如果进程是第三方程序,并且源不可用,那么您将不得不求助于类似于inotify
/的某种方法kqueue
,或者作为最后的手段,轮询内核状态(类似于top
实用程序的工作方式)。