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