美文网首页
进程 多进程-进程间通讯---信号

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

作者: 明天你好_ee9a | 来源:发表于2020-07-17 14:28 被阅读0次

信号是一种系统调用。通常我们用的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

整个通讯思路是

  • 先定义好信号函数
  • 子进程将指定信号与函数进行绑定
  • 子进程正常工作,当接收到信号的时候,执行相对应的函数,这样子就可以实现父->子进程之间的通讯了

相关文章

  • 【充电】《Nginx核心知识100讲》nginx 共享内存

    所有worker进程协同工作的关键:共享内存 1.nginx 进程间的通讯方式 nginx进程间通讯有两种,信号跟...

  • Android Binder

    进程间通讯 1. 操作系统的进程间通讯 进程间通讯 根据名字描述就是进程之间的信息交换进程间的互斥和同步 由于交换...

  • Nginx 进程管理,你需要了解哪些?

    Nginx 是一个多进程的程序,多进程之间进行通讯可以使用共享内存、信号等。当做进程间管理的时候,通常只使用信号。...

  • Linux内核及其功能

    管理进程:内核负责创建和销毁进程, 并处理它们与外部世界的联系(输入和输出),不同进程间通讯(通过信号,管道,或者...

  • 进程间通讯

    一、进程间通讯的方式进程间通讯的方式有很多,常用的有共享内存(内存映射文件、共享内存DLL、剪切板等)、命名管道和...

  • 进程间通讯

    进程间通讯原理 现代操作系统的运行模式都是在保护模式。进程运行在虚拟内存中,进程之间相互隔离,进程成为了操作系统分...

  • 进程间通讯

    本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道、FIFO、消息队列)同步(互斥量、...

  • 进程间通讯

    经典实现 1、文件共享 两个进程约定磁盘空间上的某个文件为信息交互的媒介,这种情况要注意不同进程间访问共享文件的同...

  • JVM对于signal的处理及案例分析

    1.Signal的分类 Signal我理解为进程与进程之间的通讯信号, 或者同一个进程内的处理信号, 这个信号的作...

  • Andoird进程间通讯Binder相关内容

    android进程间通讯开发了一套Binder机制,用来进行进程间通讯; 进程间传输涉及序列化,需要区分java的...

网友评论

      本文标题:进程 多进程-进程间通讯---信号

      本文链接:https://www.haomeiwen.com/subject/hsaxkktx.html