zoukankan      html  css  js  c++  java
  • Linux信号通讯编程

    信号通讯流程为:
    ①进程A/内核选择信号
    ②发送信号
    ③进程B接收信号并处理
    Linux系统支持的全部信号均定义在/usr/include/asm/signal.h。当中常见的信号有:
    ①SIGKILL:杀死进程
    ②SIGSTOP:暂停进程
    ③SIGCHLD:子进程停止或结束时用来通知父进程
    经常使用到的函数有:

    kill函数

    原型:int kill(pid_t,int sig)
    头文件:<sys/types.h><signal.h>
    功能:向进程发送信号,成功返回0,失败返回-1
    參数:pid的值有多种选择
    1. pid大于零时,pid是信号欲送往的进程的ID。
    2. pid等于零时,信号将送往全部与调用kill()的那个进程属同一个使用组的进程。

    3. pid等于-1时,信号将送往全部调用进程有权给其发送信号的进程,除了进程1(init)。 4. pid小于-1时,信号将送往以-pid为组标识的进程。

    sig:发送的信号

    signal函数

    原型:typedef void (*sighandler_t)(int);/*函数指针*/
          sighandler_t signal(int signum,sighandler_t handler)
    头文件:<signal.h>
    功能:设置信号处理方式,成功则返回处理函数的函数指针,失败返回SIG_ERR
    參数:signum:要处理的信号
         handler:相应着signum信号的处理方式,能够取SIG_IGN,SIG_DFL或用户自己定义的函数,当中SIG_IGN为忽略信号。SIG_DFL为交给Linux内核处理

    pause函数

    原型:int pause(void)
    头文件:<unistd.h>
    功能:等待信号

    实例

    进程B接收信号并依据信号做出处理:

    #include<stdio.h>
    #include<signal.h>
    #include<unistd.h>
    void func(int a)
    {
        printf("process received a signal
    ");  
    }
    void main()
    {
        signal(10,func);
        pause();
    }

    进程A发送信号给进程B.因为发送信号kill须要知道进程B的id,所以在执行进程A的时候要输入进程B的id,而进程B的id可通过命令ps aux查看。

    #include<stdio.h>
    #include<signal.h>
    #include<sys/types.h>
    void main(int argc,char* argv[])
    {
        pid_t pid;
        pid=atoi(argv[1]);/*将argv[1]由char型转化为int型*/
        kill(pid,10);
    }
  • 相关阅读:
    ECshop 二次开发模板教程4
    ECshop 二次开发模板教程3
    ECshop 二次开发模板教程2
    ECshop 二次开发模板教程1
    ecshop 二次开发及模板标签
    ECSHOP seo修改建议
    Ecshop ajax 局部刷新购物车功能
    ECSHOP
    echo二次开发 ecshop 函数列表
    Ecshop文件结构,二次开发
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7182547.html
Copyright © 2011-2022 走看看