2011-07-05 43 views
0

伪代码...如何在C/C++ Win32程序中终止以_spawnl()开头的进程?

processHandle = _spawnl(_P_NOWAIT, "foo.exe", ...); 

/* time passes... */ 
WossnameKillFunction(processHandle); 
+0

为什么不利用Windows程序中的Windows API?如果你想使用POSIX,为什么要提到Windows API? –

+0

两者都是可能的选择。如果这不能用POSIX完成,我打算用适当的Win32 API调用来实现这一点。 – MaxVT

回答

4

有没有终止对应于VC++函数_spawnl(),但它返回一个Win32 HANDLE,您可以使用:

HANDLE handle = (HANDLE)_spawnl(...); 
TerminateProcess(handle, exit_code); 

注意它只返回一个HANDLE,如果你与NOWAIT args来一个叫它。如果不是,它将返回进程的退出代码。

当然,如果能以某种方式与流程进行交流,它应该优雅地退出,那就好多了。 TerminateProcess将阻止任何清理代码被调用。

(而作为一个小侧面说明:尽管MSDN说怎么样spawnl()被弃用的POSIX的功能,它实际上从来没有在任何POSIX标准,据我知道它来自QNX起源!)