2011-12-24 54 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 */; 

这两个例子是无阻塞