IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    unix简单的信号处理

    Qiang发表于 2009-09-10 01:35:18
    love 0

    unix下最简单的信号处理函数是signal函数:

    ?View Code C
    1
    2
    
    #include <signal .h>
    void (*signal(int signo,void (*func)(int)))(int);

    sign参数是信号名,func是信号处理程序。

    为了简化signal函数的书写,我们通常用typedef:

    ?View Code C
    1
    2
    
    typedef void signfunc(int);
    signfunc signal(int,signfunc *);

    下面的程序捕捉两个用户自定义的信号进行处理:

    ?View Code C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    #include 
    #include 
    #include 
     
    typedef    void    Sigfunc(int);
    Sigfunc    *signal(int, Sigfunc *);
     
    static void sig_usr(int);
     
    int main(int argc,char **argv)
    {
    if(signal(SIGUSR1,sig_usr)==SIG_ERR)
    perror("can't catch SIGUSR1");
    if(signal(SIGUSR2,sig_usr)==SIG_ERR)
    perror("can't catch SIGUSR2");
    for(;;)
    pause();
    }
     
    static void sig_usr(int signo)
    {
    if(signo==SIGUSR1)
    printf("received SIGUSR1\n");
    else if(signo==SIGUSR2)
    printf("received SIGUSR2\n");
    else
    printf("received signal %d \n",signo);
    }

    进行编译链接运行:

    ?View Code BASH
    1
    2
    3
    4
    5
    6
    7
    
    $ cc s.c
    $ ./a.out &                   #后台运行
    [1] 4749
    $ kill -USR1 4749        #发送用户自定义信号
    $ received SIGUSR1
    $ kill -USR2 4749        #发送用户自定义信号
    $ received SIGUSR2


沪ICP备19023445号-2号
友情链接