C++ 什么';QProcess::kill()和QProcess::terminate()之间的区别是什么?

C++ 什么';QProcess::kill()和QProcess::terminate()之间的区别是什么?,c++,qt,difference,qprocess,C++,Qt,Difference,Qprocess,我读了一些文档,但对我来说不够清楚。我知道“结束”一个进程和kill()都是为了迫使它结束,但是terminate()应该做什么呢?不知道如果你写了以下内容,还有什么不清楚: void QProcess::kill() 终止当前进程,使其立即退出。 在Windows上,kill()使用TerminateProcess,在Unix和OS X上,SIGKILL信号被发送到进程 无效QProcess::​终止() 尝试终止进程 调用此函数后,进程可能不会退出(有机会提示用户输入任何未保存的文件等)

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

不知道如果你写了以下内容,还有什么不清楚:

void QProcess::kill()

终止当前进程,使其立即退出。

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


无效QProcess::​终止()

尝试终止进程

调用此函数后,进程可能不会退出(有机会提示用户输入任何未保存的文件等)。

在Windows上,terminate()将WM_CLOSE消息发布到进程的所有顶级窗口,然后发布到进程本身的主线程。在Unix和OS X上发送SIGTERM信号

Windows上未运行事件循环或其事件循环未处理WM_CLOSE消息的控制台应用程序只能通过调用kill()终止。

因此,基本上
​terminate()
不那么残酷,但不能保证进程将被终止

在Unix上,
terminate()
使用SIGTERM信号,而
kill()
向进程发送SIGKILL。它们之间的区别在于SIGTERM可以被进程捕获,从而允许它执行清理等操作。SIGTERM可以忽略。SIGKILL会从字面上杀死进程,进程不能忽略它

在Windows上,当您调用
terminate()
时,消息被发布,所以应用程序也可以优雅地处理它
kill()
调用,它或多或少与SIGKILL相等

我认为
terminate()
SIGTERM和WM_CLOSE可以由Qt处理并转换为正常的Qt事件,但您必须自己尝试。当然,您可以通过特定于系统的函数来处理它们


“是什么导致terminate()不退出进程。”


它就是你,因为你可以捕捉
terminate()
信号/消息并做任何你想做的事情,或者如果他被提示是否真的想退出应用程序,它也可以是你的应用程序的用户

如果它不在文档中,那么它就不能真正被依赖。我认为它们几乎是一样的。是的,我读过。但是考虑到我没有处理一个具有可保存文件的进程,是什么导致terminate()不退出该进程的呢。我不清楚。