Mic*_*ael 3 c++ qt qprocess difference
我读了一些文档,但对我来说还不够清楚.我知道两个"结束"进程并且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()信号/消息并做任何你想做的事情,或者如果他被提示他是否真的想要退出应用程序,它可以是你的应用程序的用户.另一个关于WM_CLOSE的资源.
| 归档时间: |
|
| 查看次数: |
3596 次 |
| 最近记录: |