iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php pcntl_fork 进程不死掉怎么办
  • 219
分享到

php pcntl_fork 进程不死掉怎么办

2024-04-02 19:04:59 219人浏览 薄情痞子
摘要

本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php pcntl_fork 进程不死掉怎么办?问题描述第一次使用php多线程处理任务引起僵尸进程问题,原因是子进程没有发送结束信号,父进程没有等待子进程的结束理解p

教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。

php pcntl_fork 进程不死掉怎么办?

问题描述

第一次使用php多线程处理任务引起僵尸进程问题,原因是子进程没有发送结束信号,父进程没有等待子进程的结束

理解

  • pcntl_fork 返回-1:开启进程失败 0:表示当前是子进程 大于零:当前是父进程,返回值是子进程pid

  • fork的子进程代码执行完后必须exit(),发送结束信号。否则继续fork子进程。获取父进程pid = posix_getppid(), 当前pid = getmypid()或者posix_getpid()

  • 父进程最好等待子进程执行结束回收子进程通过pcntl_wait()、pcntl_waitpid()实现同步、异步等待父进程循环子进程:

$result = pcntl_waitpid($pid_, $status, WNOHANG);
 
$result等于-1时代表子进程结束
  • 信号处理器的作用是根据处理子进程返回的结束信号进行处理

public function run()
    {
        $this->installSignal();
        // 获取当前pid   getmypid()
        $current_pid = posix_getpid();
        // dump('当前pid:'.$current_pid);
        cli_set_process_title('设置process_title');
        $pids = [];
        for($i = 0; $i < $this->forks; $i ++){
            $pid = pcntl_fork();
            if($pid == -1){
                die('进程开启失败');
            }else if($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($pids as $k => $pid_){
                dump('父进程不阻塞-等待子进程结束');
                $result = pcntl_waitpid($pid_, $status, WNOHANG);
                dump($result);
                if($result === -1){
              dump('子进程返回状态'.$status);
       unset($pids[$k]);
                }
        }
    }
    
    public function sigHandle($signo)
    {
        switch ($signo) {
            case SIGTERM:
                // 处理SIGTERM信号
                dump('处理SIGTERM信号');
                exit;
                break;
            case SIGHUP:
                    //处理SIGHUP信号
                dump('处理SIGHUP信号');
                exit(SIGHUP);
                break;
            case SIGUSR1:
                dump('处理SIGUSR1信号');
                break;
            default:
                // 处理所有其他信号
        }
    }
    
    public function installSignal()
    {
        pcntl_signal(SIGTERM, [$this, 'sigHandle']);
        pcntl_signal(SIGHUP, [$this,'sigHandle']);
        pcntl_signal(SIGUSR1, [$this,'sigHandle']);
    }

以上就是php pcntl_fork 进程不死掉怎么办的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: php pcntl_fork 进程不死掉怎么办

本文链接: https://www.lsjlt.com/news/99345.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php pcntl_fork 进程不死掉怎么办
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php pcntl_fork 进程不死掉怎么办?问题描述第一次使用php多线程处理任务引起僵尸进程问题,原因是子进程没有发送结束信号,父进程没有等待子进程的结束理解p...
    99+
    2024-04-02
  • php pcntl_fork进程不死掉如何解决
    这篇文章主要介绍“php pcntl_fork进程不死掉如何解决”,在日常操作中,相信很多人在php pcntl_fork进程不死掉如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php pcntl_f...
    99+
    2023-07-04
  • php 空格除不掉怎么办
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php 空格除不掉怎么办?我得到一个PHP字符串,我需要删除空格。 我使用了以下代码但是当我回显$classname时,它只显示仍然包含空格的字符串。$fieldna...
    99+
    2024-04-02
  • PHP-FPM进程数不够怎么办
    这篇文章给大家分享的是有关PHP-FPM进程数不够怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。感觉PHP-FPM进程数不够?作为一个 phper,用的最多的架构就是 LNMP。每次一到流量来了,我们的服务...
    99+
    2023-06-22
  • kafka进程自动挂掉怎么办
    如果 Kafka 进程自动挂掉,可以按照以下步骤进行排查和解决:1. 查看日志:查看 Kafka 的日志文件,通常位于 Kafka ...
    99+
    2023-10-21
    kafka
  • php-fpm 如何进程守护,保证进程不死
    php-fpm 如何进程守护,保证进程不死? PHP-FPM 是一个用于处理 PHP 脚本的 FastCGI 进程管理器。它可以与 Nginx、Apache 或其他支持 FastCGI 协议的 Web...
    99+
    2023-09-09
    php 开发语言
  • linux僵尸进程杀不死怎么解决
    今天小编给大家分享一下linux僵尸进程杀不死怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。linux僵尸进程杀不死...
    99+
    2023-06-30
  • Linux中kill命令杀不掉进程的解决办法
    1、进程杀不掉的原因有两种: (1)这个进程是僵尸进程 ; (2)此进程是"核心态"进程。 2、解决办法: (1)进入到“/proc/进程号”目录下,执行“cat status”命令可以查询到指定进程的父进程 ...
    99+
    2023-09-03
    linux 服务器 java Powered by 金山文档
  • linux怎么杀死进程kill
    在Linux中,可以使用kill命令来杀死进程。kill命令的基本语法如下:```kill [选项] 进程ID```常用的选项包括:...
    99+
    2023-09-11
    linux
  • linux怎么查看进程和杀死进程
    要查看进程,可以使用以下命令:1. `ps`命令:显示当前用户的进程列表。```ps```2. `top`命令:实时显示进程的资源使...
    99+
    2023-09-28
    linux
  • linux中kill命令杀不掉进程怎么解决
    本篇内容主要讲解“linux中kill命令杀不掉进程怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux中kill命令杀不掉进程怎么解决”吧!解决方法:1、进入到“/proc/进程号...
    99+
    2023-06-29
  • linux怎么杀死多个进程
    要杀死多个进程,可以使用以下命令:1. 使用`ps`命令来查找要杀死的进程的PID(进程ID),如:```ps -ef | grep...
    99+
    2023-09-08
    linux
  • Linux中怎么杀死defunct进程
    Linux中怎么杀死defunct进程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、什么是defunct进程(僵尸进程)在 Linux 系统中,一个进程结束了,但是他的父进...
    99+
    2023-06-12
  • 教您win7关机关不掉怎么办
      最近一位用户遇到一个非常诡异的问题,该用户向往常一样,在开始菜单中点击关机按钮,却发现一点反应也没有,根本关不了机,那么win7关机关不掉怎么办呢今天小编就来教教大家win7关机关不掉怎么解决。  win7关机关不掉的解决方法:  1、...
    99+
    2023-07-17
  • wordpress进不了怎么办
    wordpress进不了解决方法:1、检查用户名和密码,如果忘记密码,可以点击登录页面上的“忘记密码”链接,通过验证重置密码;2、可以尝试清除浏览器缓存和Cookie,然后重新登录;3、通过FTP访问网站的根目录,检查WordPress的U...
    99+
    2023-07-25
  • monkeyrunner进不去怎么办
    如果你无法进入monkeyrunner,可以尝试以下几个步骤来解决问题:1. 检查环境变量:确保你已经正确地配置了monkeyrun...
    99+
    2023-08-29
    monkeyrunner
  • Linux下怎么杀死僵尸进程
    这篇文章将为大家详细讲解有关Linux下怎么杀死僵尸进程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux 中的进程是什么?这一切始于执行 Linux 中的一个程序时,当它被执行时,它的运行实例被称...
    99+
    2023-06-27
  • linux怎么杀死所有java进程
    要杀死所有Java进程,可以使用以下命令:1. 使用ps命令列出所有Java进程的PID(进程ID):```ps -ef | gre...
    99+
    2023-10-11
    linux java
  • linux怎么杀死所有nginx进程
    可以使用以下命令来杀死所有的nginx进程:1. 使用ps命令查找nginx进程的PID(进程ID):```ps aux | gre...
    99+
    2023-09-27
    linux nginx
  • 电脑关机总是关不掉怎么办
    如果电脑无法正常关机,您可以尝试以下方法来解决问题:1. 强制关机:按住电源按钮长按几秒钟,直到电脑完全关闭。这是最简单的方法,但不...
    99+
    2023-09-04
    电脑
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作