Убить процесс, который работает в бесконечном цикле - PullRequest
0 голосов
/ 24 мая 2018

Я создаю процесс из кода 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 - они сообщают, что процесс завершен, но он все еще работает.

Как я могу завершить процесс, пока он запущен?

1 Ответ

0 голосов
/ 24 мая 2018
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 direct (если используете unicode W api и пустое имя приложения - строка не должна быть доступна только для чтения (в вашем коде она только для чтения - поэтому вы используете A * 1011)* api, в противном случае вы получили исключение))

TerminateProcess не работает - потому что у вас есть дескриптор cmd.exe , и вы можете прекратить его.но не python.exe.

taskkill с pid - они сообщают, что процесс завершен, но он все еще работает.

конечно - pid принадлежит cmd.exe и он завершен,но python.exe все еще работает.

еще раз - решение очень просто - прямой целевой процесс exec, без cmd.exe

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...