Как прекратить процесс, запущенный с _spawnl () в программе на C / C ++ Win32? - PullRequest
0 голосов
/ 05 июля 2011

в псевдокоде ...

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

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

Ответы [ 2 ]

4 голосов
/ 05 июля 2011

Нет завершающего аналога функции VC ++ _spawnl(), но он возвращает Win32 HANDLE, который вы можете использовать:

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

Обратите внимание, что он возвращает HANDLE, только если вы вызываете его с одним из NOWAIT аргументов. Если нет, он вернет код завершения процесса.

Конечно, гораздо лучше, если вы сможете каким-то образом сообщить процессу, что он должен завершиться изящно. TerminateProcess предотвратит вызов кода очистки.

(И в качестве небольшого примечания: несмотря на то, что MSDN говорит о том, что spawnl() является устаревшей функцией POSIX, она на самом деле никогда не была в каком-либо стандарте POSIX! Насколько я знаю, это происходит из QNX.)

3 голосов
/ 05 июля 2011

_spawnl возвращает HANDLE, связанный с процессом . Следовательно, вы должны иметь возможность завершить процесс, используя обычную функцию TerminateProcess .

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