等待特定子程序結束,並傳回已結束程序的 pid,如果沒有該子程序,則傳回 -1
。非封鎖等待(FLAGS 中有 WNOHANG)如果 PID 相符的子程序存在,但尚未結束,則會傳回 0。狀態會傳回 $?
和 ${^CHILD_ERROR_NATIVE}
。
PID 為 0
表示等待任何程序群組 ID 等於目前程序的子程序。PID 小於 -1
表示等待任何程序群組 ID 等於 -PID 的子程序。PID 為 -1
表示等待任何子程序。
如果你說
use POSIX ":sys_wait_h";
my $kid;
do {
$kid = waitpid(-1, WNOHANG);
} while $kid > 0;
或
1 while waitpid(-1, WNOHANG) > 0;
則你可以對所有待處理的僵屍程序進行非封鎖等待(請參閱 POSIX 中的「WAIT」)。非封鎖等待可用於支援 waitpid(2) 或 wait4(2) 系統呼叫的機器。但是,使用 FLAGS 為 0
等待特定 pid 已在各處實作。(Perl 會記住已結束但尚未由 Perl 程式碼收集的程序狀態值,來模擬系統呼叫。)
請注意,在某些系統上,傳回值 -1
可能表示子程序正在自動回收。請參閱 perlipc 以取得詳細資料和其他範例。
移植性問題:perlport 中的「waitpid」。