2011-12-24 106 views
2

我需要捕獲子進程的進程終止信號。因此,例如,如果我的Win32控制檯應用程序產生一個記事本進程,並且用戶關閉記事本,我想檢測到這一點。C:其他系統進程的捕獲進程終止

我不想阻止(異步模型)

我創建使用取勝API CreateProcess

+0

你是如何產卵它,你是模態。也就是說,如果記事本已啓動,您仍然可以在控制檯應用程序上執行某些操作。 – 2011-12-24 12:32:35

+2

你嘗試過'WaitForSingleObject'嗎? – cnicutar 2011-12-24 12:35:41

+0

WaitForSingleObject會阻塞。正確? – 2011-12-24 12:44:21

回答

3

你試過WaitForSingleObject()與它的dwMilliseconds參數爲0?如果dwMilliseconds爲0,則WaitForSingleObject()將立即返回,並且如果該過程未死,將返回WAIT_TIMEOUT,如果是,則返回WAIT_OBJECT_0
實施例中,假設子進程手柄hProcess

DWORD result = WaitForSingleObject(hProcess, 0); 
if (result == WAIT_TIMEOUT) 
    /* Process not dead */; 
else if (result == WAIT_OBJECT_0) 
    /* Process dead */; 
else 
    /* Error occured */; 

和替代是GetExitCodeProcess()。如果它仍在運行,它返回的「退出代碼」將爲STILL_ACTIVE,否則它將返回實際的退出代碼。 例,再次假設子進程句柄是hProcess

DWORD exitCode; 
if (!GetExitCodeProcess(hProcess, &exitCode)) 
    /* Error occured */; 
else if (exitCode == STILL_ACTIVE) 
    /* Process is still running */ 
else 
    /* exitCode now contains the process exit code, and the process is not running anymore */; 

這兩個例子是無阻塞