杀死以无限循环运行的进程

时间:2018-05-24 10:45:24

标签: c++ windows winapi process

我从c ++代码创建一个运行python脚本的进程。

STARTUPINFO si = {0};
PROCESS_INFOMATION pi = {0};
LPTSTR cmdArgs = _T("cmd.exe /k python myScript.py");
CreateProcess(NULL, cmdArgs, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

脚本以无限循环运行,例如:

while (1):
    print("hello")

我想杀死这个过程,但没有什么真正有效。 我将TerminateProcess()taskkillpid联系起来 - 他们报告该流程已终止但仍在运行。

如何在运行过程中终止进程?

1 个答案:

答案 0 :(得分:1)

LPTSTR cmdArgs = _T("cmd.exe /k python myScript.py");
CreateProcess(NULL, cmdArgs, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

此代码创建cmd.exe进程并创建python.exe进程。问题 - 为什么创建中间cmd.exe?你需要直接启动python.exe。使用"python myScript.py"命令行直接启动python.exe(如果使用unicode W api和空应用程序名称 - 字符串不能只读取(在您的代码中只读取 - 所以你使用< em> A api,其他你有例外))

TerminateProcess无法正常工作 - 因为您拥有 cmd.exe 的句柄,您可以终止它。但不是python.exe

  

使用pid的taskkill - 他们报告该进程已终止但仍然存在   运行

当然 - pid属于 cmd.exe 并终止。但python.exe仍在继续。

再次 - 解决方案很简单 - 直接exec目标进程,没有 cmd.exe