English | 简体中文 | 繁體中文
查询

pcntl_wait()函数—用法及示例

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


函数名称:pcntl_wait()

函数描述:pcntl_wait()函数用于等待或返回fork的子进程状态。

适用版本:PHP 4 >= 4.1.0, PHP 5, PHP 7

用法: int pcntl_wait ( int &$status [, int $options = 0 [, array &$rusage ]] )

参数:

  • $status:用于存储子进程状态的变量。可以通过pcntl_wifexited()、pcntl_wifstopped()、pcntl_wifsignaled()、pcntl_wexitstatus()、pcntl_wtermsig()和pcntl_wstopsig()等函数来解析状态。
  • $options(可选):用于指定等待选项的整数参数。默认值为0,表示阻塞等待子进程结束。
  • $rusage(可选):用于存储子进程资源使用情况的数组。

返回值:

  • 如果成功等待到一个子进程的结束,则返回子进程的进程ID。
  • 如果发生错误,返回-1。

示例:

<?php
$pid = pcntl_fork();
if ($pid == -1) {
    // 创建子进程失败
    die('fork failed');
} elseif ($pid) {
    // 父进程
    pcntl_wait($status); // 等待子进程结束
    if (pcntl_wifexited($status)) {
        echo "子进程正常终止,退出状态为:" . pcntl_wexitstatus($status) . "\n";
    } elseif (pcntl_wifstopped($status)) {
        echo "子进程被暂停,暂停信号为:" . pcntl_wstopsig($status) . "\n";
    } elseif (pcntl_wifsignaled($status)) {
        echo "子进程被信号终止,终止信号为:" . pcntl_wtermsig($status) . "\n";
    }
} else {
    // 子进程
    sleep(5); // 模拟子进程工作
    exit(0); // 子进程正常退出
}
?>

在上面的示例中,我们使用pcntl_fork()函数创建了一个子进程。父进程使用pcntl_wait()函数等待子进程结束,并根据子进程的状态进行相应的处理。子进程在sleep()函数后调用exit()函数正常退出。父进程通过pcntl_wifexited()、pcntl_wifstopped()和pcntl_wifsignaled()等函数判断子进程的结束状态,并使用pcntl_wexitstatus()、pcntl_wstopsig()和pcntl_wtermsig()等函数获取相应的状态信息。

补充纠错
上一个函数: pcntl_waitpid()函数
下一个函数: pcntl_unshare()函数
热门PHP函数
分享链接