waitpid PID,FLAGS

等待特定子程序結束,並傳回已結束程序的 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」