这篇文章主要介绍“php pcntl_fork进程不死掉如何解决”,在日常操作中,相信很多人在php pcntl_fork进程不死掉如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php pcntl_fork进程不死掉如何解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧! php pcntl_fork进程不死掉的解决办法:1、打开相应的PHP代码文件;2、查看php多线程处理代码;3、通过“public function installSignal(){pcntl_signal(SIGTERM, [$this, ‘sigHandle’])…};”方式安装信号处理器即可。php pcntl_fork 进程不死掉怎么办?问题描述第一次使用php多线程处理任务引起僵尸进程问题,原因是子进程没有发送结束信号,父进程没有等待子进程的结束理解pcntl_fork 返回-1:开启进程失败 0:表示当前是子进程 大于零:当前是父进程,返回值是子进程pidfork的子进程代码执行完后必须exit(),发送结束信号。否则继续fork子进程。获取父进程pid = posix_getppid(), 当前pid = getmypid()或者posix_getpid()父进程最好等待子进程执行结束回收子进程通过pcntl_wait()、pcntl_waitpid()实现同步、异步等待父进程循环子进程:
$result=pcntl_waitpid($pid_,$status,WNOHANG); $result等于-1时代表子进程结束
信号处理器的作用是根据处理子进程返回的结束信号进行处理
publicfunctionrun() { $this->installSignal(); //获取当前pidgetmypid() $current_pid=posix_getpid(); //dump('当前pid:'.$current_pid); cli_set_process_title('设置process_title'); $pids=[]; for($i=0;$iforks;$i++){ $pid=pcntl_fork(); if($pid==-1){ die('进程开启失败'); }elseif($pid){ //父进程得到子进程pid 免费云主机域名 dump('父进程'); dump('父进程得到子进程pid'.$pid); $pids[]=$pid; }else{ dump('子进程'); dump('父进程pid-'.posix_getppid()); //子进程 dump("第{$i}个进程"); sleep(10); dump("第{$i}个进程:等待10s"); //发送结束信号 //exit(-1); //posix_kill(getmypid(),SIGKILL); posix_kill(getmypid(),SIGHUP); } } //父进程等待子进程执行结束 while($pids){ foreach($pidsas$k=>$pid_){ dump('父进程不阻塞-等待子进程结束'); $result=pcntl_waitpid($pid_,$status,WNOHANG); dump($result); if($result===-1){ dump('子进程返回状态'.$status); unset($pids[$k]); } } } /** *信号处理器 */ publicfunctionsigHandle($signo) { switch($signo){ caseSIGTERM: //处理SIGTERM信号 dump('处理SIGTERM信号'); exit; break; caseSIGHUP: //处理SIGHUP信号 dump('处理SIGHUP信号'); exit(SIGHUP); break; caseSIGUSR1: dump('处理SIGUSR1信号'); break; default: //处理所有其他信号 } } /** *安装信号处理器 * */ publicfunctioninstallSignal() { pcntl_signal(SIGTERM,[$this,'sigHandle']); pcntl_signal(SIGHUP,[$this,'sigHandle']); pcntl_signal(SIGUSR1,[$this,'sigHandle']); }
到此,关于“php pcntl_fork进程不死掉如何解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!
这篇“php怎么实现人脸对比”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php怎么实现人脸对比”文章吧。php实现人脸对比的方法:1、创建一个…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。