前提:此命令在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
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。