牛牛在线工具

pcntl_waitpid()

收录 8868 个 PHP 函数,含用途说明与用法示例。

pcntl_waitpid()

等待或返回fork的子进程状态

函数名称:pcntl_waitpid() 适用版本:PHP 4 >= 4.1.0, PHP 5, PHP 7 函数描述:等待或返回fork的子进程状态 用法: pcntl_waitpid(int $pid, int &$status [, int $options = 0 [, array &$rusage ]]) : int|bool 参数: $pid:必需,要等待的子进程的进程ID。如果为-1,则等待任何子进程。 $status:必需,一个变量,用来存储子进程的退出状态。 $options:可选,用于指定等待行为的选项。默认为0,表示阻塞等待。可以使用以下常量进行设置: WNOHANG:如果没有终止的子进程可用,则立即返回。 WUNTRACED:如果子进程进入暂停状态,则也会返回。 $rusage:可选,一个关联数组,用于存储子进程的资源使用情况,例如CPU时间和内存使用情况。 返回值: 如果成功,返回终止子进程的进程ID。 如果出错或没有可用的子进程,返回-1。 如果使用了WNOHANG选项,并且没有终止的子进程可用,则返回0。 示例: $pid = pcntl_fork(); if ($pid == -1) { die('fork 失败'); } elseif ($pid == 0) { // 子进程代码 exit(0); } else { // 父进程代码 $status = 0; $result = pcntl_waitpid($pid, $status); if ($result == -1) { echo "等待子进程失败\n"; } else { if (pcntl_wifexited($status)) { echo "子进程正常终止,退出状态为:" . pcntl_wexitstatus($status) . "\n"; } elseif (pcntl_wifsignaled($status)) { echo "子进程被信号终止,终止信号为:" . pcntl_wtermsig($status) . "\n"; } elseif (pcntl_wifstopped($status)) { echo "子进程进入暂停状态,暂停信号为:" . pcntl_wstopsig($status) . "\n"; } } } 以上示例中,首先使用pcntl_fork()创建了一个子进程。子进程在这里被简化为直接退出。父进程调用pcntl_waitpid()等待子进程的终止,并获取子进程的退出状态。然后根据不同的退出状态使用pcntl_wifexited()、pcntl_wifsignaled()和pcntl_wifstopped()进行判断,并使用相应的pcntl_wexitstatus()、pcntl_wtermsig()和pcntl_wstopsig()函数获取更详细的信息。