我从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()
,taskkill
与pid
联系起来 - 他们报告该流程已终止但仍在运行。
如何在运行过程中终止进程?
答案 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