我想检测QProcess
我启动的是否由SIGKILL
或外部终止SIGTERM
。当我编写自己启动的进程时,这对于区分崩溃(错误)和外部干扰非常重要。
我尝试通过连接到的插槽注册监视的进程QProcess::started
并设置SIGCHLD
处理程序(使用sigaction
)以使用waitpid
. 问题是waitpid
清除了内部内核数据结构,即使我将处理程序正确链接到QProcess
实现上的处理程序,后者也无法获得子状态,waitpid
因为对该 pid 的任何下一次调用都失败了。将进程状态设置为QProcess::ProcessState::NotRunning
throughQProcess::setProcessState
可以避免挂起一般的调用waitForFinished
,但是有些极端情况我还无法修复。
我想知道是否没有更好的方法来做到这一点,除了修改 Qt 的源代码以将状态信息存储在某处。
注意:我知道崩溃也会以一个信号终止,即SIGABRT
. 这里的主要问题是,aSIGKILL
可能会告诉我 Linux 中的内存不足杀手是导致进程终止的原因。