【发布时间】:2019-01-14 13:20:52
【问题描述】:
我有一个必须暂停和恢复的 QProcess。我用
kill(pid_t(process->pid()), SIGSTOP);
和
kill(pid_t(process->pid()), SIGCONT);
暂停/恢复进程。
但是,一旦完成,进程就不能再被终止,即使是QProcess:kill()。基本上,没有QProcess::waitForFinished() 成功并且进程变成僵尸。
有人知道这是什么原因吗?有什么解决办法吗?
注意:我尝试了this question 的答案,但没有帮助。我在 Mac 上执行此操作,但谷歌搜索表明问题也发生在 Linux 上。
【问题讨论】:
-
您能否提供一个重现问题的minimal reproducible example。因为我不确定为什么停止/启动的进程应该与其他进程有任何不同。
-
我添加了an example。似乎一个暂停/恢复的过程不会引起足够多的问题,但是一旦包含第二个,事情就会出错。
-
可能会分离,在这种情况下您需要对进程进行系统扫描。
-
我仍然可以向/从进程发送/接收消息 - 如果进程被分离,是否有可能?并且该进程不会继续运行,它会变成僵尸。另外,该进程是否会被信号分离?
-
我创建了一个小的 bash 脚本 (
while true; do sleep(2); done)。有了这个,您提供的示例在两种变体中都适用于我(w 和 w/o 过程 2)。在m_process->kill()之后,m_process->waitForFinished(1000)立即返回并且程序打印0: exited。没有僵尸进程。也许问题出在您的从属进程上?