我阅读了一些文档,但对我来说还不够清楚。我知道“结束”一个进程和kill()都是要迫使它结束,但是Terminate()应该做什么呢?

最佳答案

不知道您是否写过:

http://doc.qt.io/qt-5/qprocess.html#kill


http://doc.qt.io/qt-5/qprocess.html#terminate
因此,基本上​terminate()不太残酷,但是不能保证该过程将被终止。
在Unix上,terminate()使用SIGTERM信号,而kill()将SIGKILL发送到进程。它们之间的区别在于,SIGTERM可以被进程捕获,从而可以执行清除等操作。SIGTERM可以忽略。 SIGKILL实际上会杀死进程,进程不能忽略它。
在Windows上,当您调用terminate()时,会发布WM_CLOSE消息,因此应用程序也可以正常处理它。 kill()调用TerminateProcess(),与Windows的SIGKILL等效。
我认为terminate() SIGTERM和WM_CLOSE可以由Qt处理并转换为正常的Qt事件,但是您必须自己尝试。您当然可以通过系统特定的功能来处理它们。

“是什么原因使Terminate()无法退出该进程。”
是您,因为您可以捕获terminate()信号/消息并做任何您想做的事,或者如果他确实想退出应用程序时系统提示他,它可以是您应用程序的用户。 Yet another resource on WM_CLOSE

10-04 13:20