前提:此命令在windows平台上不可用,且最好是在cli(命令行)下运行(ps:宝塔默认禁用pcntl_fork()函数)。
需要用到pcntl_fork()函数,此函数创建一个子进程,父进程和子进程都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程号,而子进程得到的是0。
const NEWLINE = "\n\n";
if (strtolower(php_sapi_name()) != 'cli') {
die("请在cli模式下运行");
}
echo "当前进程(执行fork前):" . getmypid() . NEWLINE;
//fork出子进程
$pid = pcntl_fork();
//fork后父进程会走自己的逻辑,子进程从处开始走自己的逻辑,堆栈信息会完全复制给子进程内存空间,父子进程相互独立
if ($pid == -1) { // 创建错误,返回-1
die('进程fork失败');
} else if ($pid) { // $pid > 0, 如果fork成功,在子进程中pid为0,而父进程中pid则大于0。
// 父进程逻辑
$time = microtime(true);
$thispid=getmypid();
echo "{$thispid}-{$pid}-我是父进程:{$time}".NEWLINE;
} else { // $pid = 0
// 子进程逻辑
$time = microtime(true);
$thispid=getmypid();
echo "{$thispid}-{$pid}-我是子进程-{$pid}:{$time}".NEWLINE;
}补充:getmypid()获取当前进程id。
如果帮助到你,请赏杯奶茶喝~
- 本文链接: https://www.shx1024.top//index/article/details/article_id/75.shtml
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。