• 一起talk C栗子吧(第八十四回:C语言实例--使用信号进行进程间通信一)



    各位看官们,大家好,上一回中咱们说的是进程间通信的样例。这一回咱们说的样例是:使用信号进行进程间通信。闲话休提,言归正转。

    让我们一起talk C栗子吧!

    我们在上一回中提到过进程之间通信须要解决的三个问题,时间不长。我想大家都记得。今天我们就来解决第一个问题:进程之间怎样进行通信

    信号的概念

    在解决这个问题前。我们先介绍一下信号。信号是Unix/Linux系统提供的一种机制,它本质上一种软件中断

    信号为我们提供了一种异步的事件处理方法。当进程收到信号时就会採取某种操作。比如,当进程收到终止信号(SIGKILL)时就会终止进程。这点我们在介绍进程结束时做过相关的说明。

    系统为信号定义了名字,我们能够通过名字来使用信号,信号名字是以SIG开头的字符串。比方。SIGKILL,SIGINT等。

    信号的产生

    要使用信号进行进程间的通信,首先须要产生信号,信号能够通过以下几种方式来产生:

    • 1.用户使用终端按键时发出信号。

      比方按下ctrl+c会发出中断信号:SIGINT;

    • 2.硬件有异常时会发出信号。比方使用无效的内存;
    • 3.软件符合某种条件时会发出信号。比方闹钟时钟超时后会发出SIGALRM信号。
    • 4.使用kill命令主动发送信号;

    信号的处理

    进程收到信号后会做对应的处理,详细有以下几种处理方式:

    • 1.忽略信号。该处理方式就是收到信号后什么也不做,自己总在歇息;
    • 2.执行系统对信号定义的默认动作。

      该处理方式就是收到信号后把它交给系统去处理,自己在一边歇息;

    • 3.捕捉信号。这样的处理方式就是收到信号后做一些相关的处理,至于做什么处理,须要用户去实现。

    明确信号的这些知识后,我们就正式開始介绍使用信号这样的方式进行通信。

    我们举一个简单的样例进行说明。

    编译以下的程序而且执行:

    int main
    {
        int i = 0;
        while(i++ < 9999)
        {
            printf("i have been sleeping for %d second 
    ",i);
            sleep(1);
        }
    
        return 0;
    }

    以下是程序的执行结果。请大家參考:

    ./s                                  //在终端中执行编译后的程序
    i have been sleeping for 1 second    //程序在执行,而且输出执行结果
    i have been sleeping for 2 second 
    i have been sleeping for 3 second 
    i have been sleeping for 4 second 
    i have been sleeping for 5 second 
    i have been sleeping for 6 second 
    i have been sleeping for 7 second 
    i have been sleeping for 8 second 
    i have been sleeping for 9 second 
    i have been sleeping for 10 second 
    ^C                                   //在终端中按下ctrl+c终止程序执行

    通过上面的程序, 我们分析一下程序中进程通信的原理

    • 把在终端中执行的程序当作进行A,终端本身当作进程B。
    • 在进行B中通过按键给进程 A发送SIGINT信号。
    • 进程B收到该信号后做出了响应:停止执行。我们在进程B中能够看到进程A停止了执行。

    看官们。我们后面的章回中还会举其他进程之间通信的样例,以便让大家对使用信号进行进程之间通信有更加深入的了解。

    各位看官。关于使用信号进行进程间通信的样例咱们就讲到这里。欲知后面还有什么样例,且听下回分解 。


  • 相关阅读:
    让ios支持openssl
    数组
    NSValue
    音频
    NSObject分类
    NSJSONSerialization
    Java并发编程-深入探讨synchronized实现原理
    设计模式-挖掘工厂模式应用场景-全面分析工厂模式原理
    Spring插件安装
    Java并发编程-深入Java同步器AQS原理与应用-线程锁必备知识点
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7225319.html
Copyright © 2020-2023  润新知