进程 多进程-进程间通讯---信号

2020-07-17  本文已影响0人  明天你好_ee9a

信号是一种系统调用。通常我们用的kill命令就是发送某个信号给某个进程的。父进程向子进程发送sigint信号。子进程捕获信号,调用信号处理函数处理。

上代码

<?php
$ppid = posix_getpid();
echo "父进程的进程号:{$ppid}".PHP_EOL;

// 定义一个信号处理函数
function sighandler($signo) {
    $pid = posix_getpid();
    echo "{$pid} 进程退出".PHP_EOL;
    exit(1);
}

$pid = pcntl_fork();
if ( $pid == -1) {
    // 创建失败
    exit("子进程创建失败".PHP_EOL);
} else if ($pid == 0) {
    // 子进程执行程序
    declare(ticks=10);
    // 注册信号处理函数
    pcntl_signal(SIGINT, "sighandler");
    $pid = posix_getpid();
    while(true){
        echo "{$pid} 子进程正在运行,等待任务!".PHP_EOL;
        sleep(1);
    }
    exit("({$pid})子进程退出!").PHP_EOL;
}else{
    // 父进程执行程序
    $childList[$pid] = 1;
    // 5秒后,父进程向子进程发送sigint信号.
    sleep(3);
    posix_kill($pid,SIGINT);
    sleep(5);
}
echo "({$ppid})主进程执行完毕".PHP_EOL;

//执行结果

image.png

整个通讯思路是

上一篇 下一篇

猜你喜欢

热点阅读