在PHP中实现异步进程可以使用pcntl_fork
函数来创建子进程,并使用pcntl_signal
函数来处理子进程的信号。
下面是一个简单的示例:
$pid = pcntl_fork(); if ($pid == -1) { // 创建子进程失败 exit("fork failed"); } elseif ($pid == 0) { // 子进程代码 // 这里可以进行一些耗时的任务 // 子进程执行完毕后发送一个SIGUSR1信号给父进程 posix_kill(posix_getppid(), SIGUSR1); exit; } else { // 父进程代码 // 注册SIGUSR1信号处理函数 pcntl_signal(SIGUSR1, function () { // 子进程执行完毕后会触发这个处理函数 echo "Child process finished\n"; }); // 父进程继续执行其他任务 // ... } // 等待所有子进程退出 while (pcntl_waitpid(0, $status) != -1) { pcntl_wexitstatus($status); }
在这个示例中,我们使用pcntl_fork
函数创建了一个子进程,并在子进程中执行一些耗时的任务。在子进程执行完毕后,发送一个SIGUSR1
信号给父进程。父进程通过pcntl_signal
函数注册了一个处理函数来处理这个信号,并在处理函数中输出一段文字。
注意,这个示例只是一个简单的演示,实际使用中可能需要更多的处理和逻辑。