PHP signal 信号
最早写php时,发现在终端执行一个php文件,会一直等待程序执行完成以后,终端才能继续下面的操作,若不小心按了下Ctrl+C会导致php程序退出,闭避免这种情况发生,将会使用php的系统编程,即signal。
一、实现主进程退出、子进程继续执行的php应用程序,创建php文件sig.php:
$i=0; //fork是创建了一个子进程,父进程和子进程 都从fork的位置开始向下继续执行, //不同的是父进程执行过程中,得到的fork返回值为子进程 号,而子进程得到的是0。 $pid = pcntl_fork(); //父进程和子进程都会执行下面代码 if ($pid == -1) {////错误处理:创建子进程失败时返回-1. die('could not fork'); } else if ($pid) {//父进程会得到子进程号,所以这里是父进程执行的逻辑 // we are the parent //pcntl_wait($status); //Protect against Zombie children exit($pid); } else {//子进程得到的$pid为0, 所以这里是子进程执行的逻辑。 } while($i<10){ pcntl_signal_dispatch(); sleep(1); echo $i++; }
在终端执行:php sig.php 就会发现主进程瞬间退出,但是子进程却仍然在不断的执行(打印数据)。
pcntl*,可实现php的守护进程。