您的位置 首页 php

42、php多进程运行注意事项

1、案例

创建子进程,子进程进入while循环,而父进程打印信息后,终止

1.1、源码

在之前的代码基础上,修改得到如下代码

1.2、执行结果

截图的关系,程序还是每隔1s,输出当前时间。产生此结果的原因是什么?

1.3、原因说明

由于父进程先于子进程退出。因此子进程就成了孤儿进程。它被linux系统的1号进程收养,从而摆脱当前的运行终端。

那是否可以避免此种情况,或者说,当我们创建子进程后,一定要确保子进程完整退出后,父进程才退出

2、修改案例的源码

2.1、源码

<?php

/**

* Copyright (C) Iamasb

* @project : 3、workerman相关知识点

* @explain : fork子进程

* @filename : fork.php

* @author : iamasb

*/

$name = ‘xiaobei’;

$pid = pcntl_fork();

if ($pid<0) {

die(“fork is error.”);

}

if ($pid===0) {

echo “I am a child.–>”,posix_getppid(),’–>’,posix_getpid(),’->’,$name,PHP_EOL;

while (1) {

echo time(),PHP_EOL;

sleep(2);

}

}

echo “I am a father–>”,posix_getpid(),’–>’,$name,PHP_EOL;

// 非阻塞的运行方式

//while (1) {

// $pid = pcntl_wait($status,WNOHANG); // 非阻塞

// if ($pid>0) {

// echo ‘exit->’,$pid,’–>’,$status,PHP_EOL;

// exit;

// }

//}

$pid = pcntl_wait($status,WUNTRACED); // 阻塞,直到子进程退出时,才返回

echo ‘exit->’,$pid,’–>’,$status,PHP_EOL;

2.2、执行结果

备注: 由于当前输出信息,占据了终端。因此只能另开 shell 终端,并使用kill命令,杀死子进程

文章来源:智云一二三科技

文章标题:42、php多进程运行注意事项

文章地址:https://www.zhihuclub.com/153786.shtml

关于作者: 智云科技

热门文章

网站地图