perl-5.22.1
waitpid PID,FLAGS

Waits for a particular child process to terminate and returns the pid of the deceased process, or -1 if there is no such child process. On some systems, a value of 0 indicates that there are processes still running. The status is returned in $? and ${^CHILD_ERROR_NATIVE}. If you say

特定のチャイルドプロセスが終了するのを待ち、消滅したプロセスの pid を 返します; 指定したチャイルドプロセスが存在しないときには、-1 を返します。 値 0 がプロセスがまだ実行中であることを示すシステムもあります。 ステータスは $?${^CHILD_ERROR_NATIVE} に返されます。 以下のようにすると

    use POSIX ":sys_wait_h";
    #...
    do {
        $kid = waitpid(-1, WNOHANG);
    } while $kid > 0;

then you can do a non-blocking wait for all pending zombie processes. Non-blocking wait is available on machines supporting either the waitpid(2) or wait4(2) syscalls. However, waiting for a particular pid with FLAGS of 0 is implemented everywhere. (Perl emulates the system call by remembering the status values of processes that have exited but have not been harvested by the Perl script yet.)

ブロックが起こらないようにして、全ての待機中ゾンビプロセスを wait します。 ブロックなしの wait は、システムコール wait_pid(2) か、 システムコール wait4(2) をサポートしているマシンで利用可能です。 しかしながら、特定の pid を 0 の FLAGS での wait はどこでも 実装されています。 (exit したプロセスのステータス値を覚えておいて、Perl がシステムコールを エミュレートしますが、Perl スクリプトには取り入れられていません。)

Note that on some systems, a return value of -1 could mean that child processes are being automatically reaped. See perlipc for details, and for other examples.

システムによっては、返り値が -1 の場合は子プロセスが自動的に 刈り取られたことを意味するかもしれないことに注意してください。 詳細やその他の例については perlipc を参照してください。

Portability issues: "waitpid" in perlport.

移植性の問題: "waitpid" in perlport