用于非子pid的c++信号监听器
C++ signal listener for non-child pid
我正在使用c++,我需要SIGCHLD的等量物用于我知道的进程(即我知道它是pid),但没有生成。
是否有一个良好的设计模式来监听/观察/监控另一个进程的生命周期,当它不是你的孩子或在你的组或会话?
编辑:我特别想知道异常终止(即segfault,信号等)。我想窃听相关进程接收到的信号
我不知道它是否遵循特定的模式,本身,但是一种技术是让进程建立与监视器的连接。监视程序监视连接,当它关闭时,它知道进程已经关闭。
如果监视程序想知道被监视的进程是否响应,您可以使用连接来监视进程必须提供的心跳消息。
如果监视程序想知道被监视的进程是否取得进展,心跳消息可以提供状态信息,使监视程序能够监视该进程。
不同的操作系统可能提供不同的方法来实现相同的目标。例如,在Linux上,监视程序可以使用inotify
监视该进程的/proc
条目,以确定该进程是启动还是关闭。BSD kqueue
具有类似的能力。进程可以将其心跳/状态导出到共享内存中,并且监视器可以在信号量上使用定时等待来查看数据是否正在更新。
如果进程是第三方程序,并且源代码不可用,那么您将不得不求助于类似于inotify
/kqueue
的方法,或者作为最后的手段,轮询内核状态(类似于top
实用程序的工作方式)。
相关文章:
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 有可能在信号处理程序中设置promise吗
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 在条件变量中触发错误信号的频率是多少
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 调试和自由执行中的信号处理
- 升压信号2将插槽传递到成员功能以断开连接
- C++函数包装器来捕获某些信号
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 中止信号来自 C++ 中的中止(3) (SIGABRT)
- Qt将信号与另一个类方法连接
- C++ 信号和插槽不工作:插槽不响应事件
- Coursera :自动评分器的未知信号 11
- 阻塞信号会导致升压过程不起作用