簡體   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