码迷,mamicode.com
首页 > 系统相关 > 详细

swoole见的僵尸进程|孤儿进程|进程之间的通讯

时间:2020-05-09 21:09:07      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:ppi   工作   之间   操作系统   roc   wait   star   函数   swoole   

一、定义
什么是僵尸进程
维基百科的定义:在类UNIX系统中,僵尸进程是指完成执行(通过exit系统调用,或运行时发生致命错误或收到终止信号所致)但在操作系统的进程表中仍然有一个表项(进程控制块PCB),处于”终止状态”的进程。

这个定义很准确,但并不好理解,通俗的说法是一个进程fork了一个子进程,子进程先于父进程退出,但父进程没有调用wait(通过wait系统调用读取退出进程的退出态,退出进程的在进程表中的表项就被删除),导致这个进程已经退出但是仍在进程表中占有一个位置,这种进程称为僵尸进程。

什么是孤儿进程
孤儿进程:一个进程fork了一个子进程, 父进程先于子进程退出,运行中的子进程称为孤儿进程。
孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

下面,让我们来看2个示例:僵尸进程

echo ppid =  . getmypid(), PHP_EOL;
 $process = new swoole_process(function (swoole_process $worker) {
    echo pid =  . getmypid(), PHP_EOL;
    sleep(10);
    echo child process exit, PHP_EOL;
}, false);
 
$process->start();
 
sleep(1000);
echo parent process exit, PHP_EOL;
#子进程在父进程没有执行完就退出了,所以会产生僵尸进程
#一般流程是子进程在父进程执行完wait后再退出,

技术图片

 孤儿进程

echo ppid =  . getmypid(), PHP_EOL;
$process = new swoole_process(function (swoole_process $worker) {
    echo pid =  . getmypid(), PHP_EOL;
    sleep(1000);
    echo child process exit, PHP_EOL;
}, false);
$process->start();
sleep(10);
echo parent process exit, PHP_EOL;

技术图片

 

 

4.父进程和子进程之间的通讯

<?php
    #进程之间的通讯
    #主进程写入数据,字进程读取数据,因为在子进程里面有睡眠函数,所以不会出现僵尸进程
    $workers=[];
    $worker_num=2;
    for($i=0;$i<$worker_num;$i++){
        $process = new swoole_process("doprocess",false,false);
        $process->useQueue();
        $pid = $process->start();
        $workers[$pid] = $process;
    }

    function doprocess(swoole_process $process){
        $data = $process->pop();
        echo $data;
        sleep(5);
        $process->exit(0);
    }

    foreach ($workers as $pid => $process) {
        $str="父进程写数据".$pid.PHP_EOL;
        $process->push($str);
    }

    foreach ($workers as $pid => $process) {
        $ret = swoole_process::wait();
    }
?>

 

swoole见的僵尸进程|孤儿进程|进程之间的通讯

标签:ppi   工作   之间   操作系统   roc   wait   star   函数   swoole   

原文地址:https://www.cnblogs.com/zh718594493/p/12859958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!