[英]What is the difference between QProcess::start and QProcess::startDetached?
[英]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.