繁体   English   中英

QProcess :: kill()和QProcess :: terminate()之间有什么区别?

[英]What's the difference between QProcess::kill() and QProcess::terminate()?

我读了一些文档,但对我来说还不够清楚。 我知道两个“结束”进程并且kill()意味着强制它结束,但是终止()应该做什么呢?

不知道你写的是什么还不清楚:

void QProcess :: kill()

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

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

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


void QProcess :: terminate()

尝试终止该过程。

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

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

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

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

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

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

在Windows上发布WM_CLOSE消息,当您调用terminate() ,应用程序也可以正常处理它。 kill()调用TerminateProcess() ,它或多或少是Windows等价的SIGKILL。

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


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

这是你,因为你可以捕获terminate()信号/消息并做任何你想做的事情,或者如果他被提示他是否真的想要退出app,它可以是你的应用程序的用户。 另一个关于WM_CLOSE的资源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM