【问题标题】:QThread::terminate vs killQThread::terminate vs kill
【发布时间】:2018-03-27 18:59:21
【问题描述】:

我在 QThread(C++ 中)中有一个 BASH 脚本运行(QProcess 阻塞)。这个 BASH 脚本 tar 了很多文件,可以运行 1/2 小时。

如果用户想要关闭我的程序,我需要终止我的 BASH 脚本。但是怎么做? QThread::Quit 将在处理信号之前等待 BASH 程序终止,QThread::Terminate 文档说它可能会立即终止一个线程。

我想要'kill -9 myscript'的等价物。有没有合适的 Qt 方法来做到这一点?

【问题讨论】:

  • 不看代码很难说,但我怀疑你最好通过非阻塞 QProcess 运行 bash 脚本(使用信号/槽来跟踪状态变化) 然后使用QProcess::terminateQProcess::kill 如果您需要强制终止进程。我认为QThread 只是妨碍了这里。

标签: c++ qt kill qthread qprocess


【解决方案1】:
  1. 不要使用额外的线程。从来没有必要。
  2. 切勿使用任何waitForXxx 方法。
  3. 使用QProcess::kill 杀死进程。
  4. 使用QProcess 的信号在进程更改状态时获得通知,例如完成了。

【讨论】:

    【解决方案2】:

    我想要'kill -9 myscript'的等价物。有没有合适的Qt方式 这样做?

    来自 Qt 的文档 http://doc.qt.io/qt-5/qprocess.html#kill

    void QProcess::kill()

    杀死当前进程,使其立即退出。

    在 Windows 上,kill() 使用 TerminateProcess,而在 Unix 和 macOS 上, SIGKILL 信号被发送到进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 2018-10-07
      • 1970-01-01
      • 2013-10-15
      • 2017-09-29
      • 1970-01-01
      相关资源
      最近更新 更多