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