如何在C / C ++ Win32程序中终止使用_spawnl()启动的进程?

时间:2011-07-05 06:36:12

标签: c++ c winapi posix

在伪代码中......

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

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

2 个答案:

答案 0 :(得分:4)

VC ++函数_spawnl()没有终止副本,但它确实返回了一个可以使用的Win32 HANDLE

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

请注意,如果您使用其中一个HANDLE args调用它,则只返回NOWAIT。如果没有,它将返回进程的退出代码。

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

(并且作为一个小旁注:尽管MSDN说spawnl()是一个不推荐使用的POSIX函数,但它实际上从未出现在任何POSIX标准中!据我所知它来自QNX。)

答案 1 :(得分:3)

_spawnl returns the HANDLE associated with the process。因此,您应该能够使用普通TerminateProcess function终止该过程。