gpt4 book ai didi

qt - 杀死停止并恢复的 QProcess

转载 作者:行者123 更新时间:2023-12-03 14:25:12 66 4
gpt4 key购买 nike

我有一个必须暂停和恢复的 QProcess。我用

kill(pid_t(process->pid()), SIGSTOP);


kill(pid_t(process->pid()), SIGCONT);

暂停/恢复过程。

但是,一旦完成,该进程就不能再被终止,即使是 QProcess:kill() .基本上没有 QProcess::waitForFinished()永远成功,过程变成僵尸。

有人知道这是什么原因,有什么解决办法吗?

注意:我尝试了 this question 的答案它没有帮助。我在 Mac 上这样做,但谷歌搜索表明该问题也发生在 Linux 上。

最佳答案

通常,当 SIGSTOP 和随后的 SIGCONT 被发送到进程时,可能会发生很多事情。停止进程时,相关进程(例如子进程或父进程)不会同时停止。这可能会导致奇怪的异常,例如管道破裂或导致超时的延迟。所以总的来说,这些信号并没有得到很好的支持。只有对于非常简单的架构(没有 fork ,没有子进程等),它们才应该工作。此外,由于进程可以对 SIGCONT 使用react,因此任何框架(如 QT)都可能会这样做并重新初始化其某些设施。当然,这也是有道理的,因为在停止之后,有些事情可能已经发生了变化,否则在发生变化时可能已经注意到了。

不幸的是,这种情况非常罕见并且包含了如此多的不同方面,以至于这通常不会完全被测试覆盖,因此与同一库的其他部分相比,错误很可能发生。我假设您刚刚在 QT 代码中发现了一个问题,或者框架不支持这些信号。你有任何文件说明它应该吗?

您现在可以执行的步骤:

  • 在相关库的错误跟踪系统中搜索已提交的错误报告。
  • 创建 mcve显示问题。
  • 如果没有提交任何内容,请提交错误报告 ;-)

  • 但我不希望库的维护者 react 非常快,如果有的话。正如我所说,SIGSTOP 和 SIGCONT 在更复杂的场景中通常不受支持。它们的含义太复杂了。

    关于qt - 杀死停止并恢复的 QProcess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51726989/

    66 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com