美文网首页
用信号 (Signals) 实现进程间通信

用信号 (Signals) 实现进程间通信

作者: wjundong | 来源:发表于2019-12-05 14:58 被阅读0次

先备知识进程通信之信号(Signals)

在这篇文章中,子进程和父进程之间的通信使用的是 kill()signal()fork() 系统调用完成的。

fork() 从父进程创建子进程。可以检查返回值 pid 以决定它是子进程(如果 pid == 0 )还是父进程(pid = 子进程id)。

然后,父进程可以使用pid和kill()向子级发送消息。子进程使用signal()获取这些信号,并调用相应的函数。

示例

下面是如何使用 kill() 和 signal() 在 2 个进程中相互通信的示例

// C程序演示 sighup(), sigint() and sigquit() 信号函数
#include <signal.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <unistd.h> 

// 函数声明
void sighup(); 
void sigint(); 
void sigquit(); 


void main() 
{ 
    int pid; 

    /* 创建子进程 */
    if ((pid = fork()) < 0) { 
        perror("fork"); 
        exit(1); 
    } 

    /* 子进程 */
    if (pid == 0) { 
        signal(SIGHUP, sighup); 
        signal(SIGINT, sigint); 
        signal(SIGQUIT, sigquit); 
        for (;;) 
            ; /* 死循环 */

    /* 父进程 */
    }  else  { 
        printf("\n父亲: 发送 SIGHUP\n\n"); 
        kill(pid, SIGHUP); 

        sleep(3); /* 暂停 3s  */
        printf("\n父亲: 发送 SIGINT\n\n"); 
        kill(pid, SIGINT); 

        sleep(3); /* 暂停 3s */
        printf("\n父亲: 发送 SIGQUIT\n\n"); 
        kill(pid, SIGQUIT); 
        sleep(3); 
    } 
} 

// 定义 sighup() 函数
void sighup() 
{ 
    signal(SIGHUP, sighup); /* 重置信号 */
    printf("孩子: 我收到了一个 SIGHUP\n"); 
} 

// 定义 sigint() 函数
void sigint() 
{ 
    signal(SIGINT, sigint); /* 重置信号 */
    printf("孩子: 我收到了一个 SIGINT\n"); 
} 

// 定义 sigquit() 函数
void sigquit() 
{ 
    printf("我的爸爸竟要杀我!!!\n"); 
    exit(0); 
}

程序执行结果

image.png

相关文章

  • 用信号 (Signals) 实现进程间通信

    先备知识:进程通信之信号(Signals) 在这篇文章中,子进程和父进程之间的通信使用的是 kill() 和 si...

  • Android binder解析

    Linux 系统提供的进程间通信(IPC)方式 Signals 信号量(System V IPC) Pipes 管...

  • 进程通信之信号 (Signals)

    先备知识:fork()系统调用、wait()系统调用 信号是软件生成的中断,比如用户按下 Ctrl-C 或一个进程...

  • Android通过继承Binder类实现多进程通信

    上一篇讲到用AIDL实现进程间通信,地址:Android进程间通信之AIDL AIDL的底层是通过Binder进行...

  • 进程间通信

    1.信号 信号是比较复杂的通信方式,用于通知接收进程有某种事情发生,除了用于进程间通信外,进程还可以发送信号给进程...

  • Java多线程(2)

    Java多线程(2) 线程间的通信 线程间的通信又称为进程内通信,多个线程实现互斥访问共享资源时会互相发送信号或等...

  • 0-Binder

    目的 解决进程间相互调用 常见IPC Signals 信号量 Pipes 管道 Socket 套接字(设置中底层会...

  • 【python】进程间通信:Queue的详细用法

    关于python 进程间通信 Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信。 进程间通...

  • Linux进程间通信——信号

    一、认识信号 信号(Signals)是Unix、类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制...

  • Linux系统编程:Inter-Process Communic

    一、IPC——进程间通信 Linux系统提供的进程间通信的手段: 消息传递类:信号 匿名管道 命名管道 socke...

网友评论

      本文标题:用信号 (Signals) 实现进程间通信

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