kill SIGNAL, LIST
kill SIGNAL

向一系列進程發送信號。返回成功用於發信號的參數數量(這不一定與實際被殺死的進程數量相同,例如,當殺死進程組時)。

my $cnt = kill 'HUP', $child1, $child2;
kill 'KILL', @goners;

SIGNAL 可以是信號名稱(一個字符串)或信號號碼。信號名稱可以以 SIG 為前綴,因此 FOO 和 SIGFOO 指的是同一個信號。建議使用 SIGNAL 的字符串形式以實現可移植性,因為在不同的操作系統中,同一個信號可能有不同的號碼。

當前平台支持的信號名稱列表可以在 $Config{sig_name} 中找到,該列表由 Config 模組提供。更多詳情參見 Config。

負的信號名稱與負的信號號碼相同,將殺死進程組而不是進程。例如,kill '-KILL', $pgrp 和 kill -9, $pgrp 將向指定的整個進程組發送 SIGKILL。這意味著通常您應該使用正的信號而不是負的信號。

如果 SIGNAL 是數字 0 或字符串 ZERO(或 SIGZERO),則不會向進程發送信號,但 kill 會檢查是否可以向其發送信號(這意味著進程由相同的用戶擁有,或者我們是超級用戶)。這對於檢查子進程是否仍然活著(即使只是作為殭屍存在)並且未更改其 UID 是有用的。請參閱 perlport 以獲取有關此構造的可移植性的注意事項。

PROCESS 數字為零或負數時,kill 的行為取決於操作系統。例如,在符合 POSIX 標準的系統上,零將信號發送到當前進程組,-1 將信號發送到所有進程,而任何其他負的 PROCESS 數字將作為負信號數字並殺死指定的整個進程組。

如果 SIGNAL 和 PROCESS 都是負數,則結果是未定義的。在將來版本中可能會生成警告。

有關更多細節,請參閱 perlipc 中的 "Signals"

在某些平台(如 Windows)上,fork(2) 系統調用不可用,Perl 可以構建為在解釋器級別模擬 fork。此仿真存在與 kill 相關的限制,必須考慮到,用於在 Windows 上運行的代碼以及旨在具有可移植性的代碼。

有關更多細節,請參閱 perlfork

如果沒有進程的 LIST,則不會發送信號,並且返回值為 0。但是,有時會使用此形式,因為它會運行污點檢查,如果您的 Perl 支持污點檢查的話。但請參閱 perlsec 中的 "Laundering and Detecting Tainted Data"

可移植性問題:請參閱 perlport 中的 "kill"