Как я могу аккуратно убить процесс в ActiveState Perl?

Нужно ли использовать определенный код выхода?

Win32::Process::Create(
    $ProcessObj,
    "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
    "firefox -no-remote -P $prof_name",
    0,
    NORMAL_PRIORITY_CLASS,
".")|| die ErrorReport();
$ProcessObj->kill(0);

Таким образом, это убивает, но не мягко, оно порождает проблемы с профилем Firefox.

2 ответа

Короткие Обычные методы кроме Window's taskkill силовые. Спасибо mob и melpomene.


Win32::Process документация не говорит о том, что методы Kill или же KillProcess да, но они кажутся довольно тупыми по этому поводу. Windows действительно предоставляет градацию того, как завершить процесс, см., Например, этот пост о корректном завершении через winapi, даже если он не имеет сигналов UNIX. Тем не менее, это, очевидно, не используется ни модулем, ни kill (см. конец).

Собственный Windows taskkill следует попросить прекратить процесс. Запросите флаги, запустив taskkill /? в консоли в вашей системе. Вот документация для taskkill on MS technet, Например, это завершает процесс его $pid вместе со своими детьми

my $pid = $ProcessObj->GetProcessID();
system("taskkill /t /pid $pid");

Если метод GetProcessID() не возвращает реальный идентификатор, см. ссылку ниже для других способов.

Я не могу проверить на Windows сейчас. Там немного больше связанных деталей this post, вторая часть.


в Perl kill по-видимому силен на Windows. От perlport

... kill($sig, $pid) завершает процесс, определенный $pid и немедленно завершает работу со статусом выхода $sig,

Спасибо melpomene за комментарий и документацию по ссылке.

exitcode Полагаю, только говорит процессу, что сообщать системе как о своем выходе.

Насколько я знаю в Perl, вы могли бы просто сделать

kill -15 (pid)

Кто аккуратно убивает процесс в perl

Другие вопросы по тегам