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