QProcess::kill() 和 QProcess::terminate() 有什么区别?
What's the difference between QProcess::kill() and QProcess::terminate()?
我阅读了一些文档,但对我来说还不够清楚。我知道两者都"结束"一个进程,而 kill() 意味着强制它结束,但是 terminate() 应该做什么呢?
Dunno 如果你写过什么还不清楚:
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可以被一个进程捕获,这允许它执行清理等。SIGKILL会从字面上杀死过程,过程不能忽视它。
在 Windows 上,当您调用 terminate()
时,会发布WM_CLOSE消息,因此应用程序也可以正常处理它。 kill()
调用 TerminateProcess(),它或多或少与 SIGKILL 等同于 Windows。
我认为terminate()
SIGTERM和WM_CLOSE可以由Qt处理并转换为正常的Qt事件,但你必须自己尝试。当然,您可以通过系统特定的功能来处理它们。
"是什么原因导致终止()不退出进程。"
就是你,因为你可以捕捉terminate()
信号/消息,做任何你想做的事情,或者如果他被提示是否真的想退出应用程序,它可以是你的应用程序的用户。另一个关于WM_CLOSE的资源。
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- C++ - "!pointer"和"pointer == nullptr"的区别?
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- 使用QProcess执行命令,并将结果存储在QStringList中
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 返回递归调用和仅递归调用的区别
- Qt:remove() 和 rmdir() 有什么区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- QProcess::kill() 和 QProcess::terminate() 有什么区别?
- QProcess::start和QPprocess::startDetached之间有什么区别