Коротко. Обычные методы, кроме taskkill
Window, являются принудительными. Благодаря mob и melpomene < / а>.
В документации Win32::Process
не говорится, какие методы Kill
или KillProcess
делают, но они кажутся довольно прямолинейными. Windows действительно предоставляет градацию того, как завершить процесс, см., Например, этот пост на изящном завершении через winapi, даже если он не имеет сигналов UNIX. Однако это, по-видимому, не используется ни модулем, ни kill
(см. Конец).
Собственный taskkill
Windows должен попросить завершить процесс. Запросите у него флаги, запустив 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
только сообщает процессу, о чем сообщать системе при выходе.
person
zdim
schedule
10.06.2016