首页 > 代码库 > 一、进程与信号之信号的概念

一、进程与信号之信号的概念

信号:进程与进程之间通讯机制

  信号是软件中断

  信号是异步事件

  信号来源:内核产生,常用信号kill(),raise(),alarm(),settimer()等

kill -l 
查看linux所有 信号共64个 1-31 非实时信号发送信号可能回丢失,不支持信号排队
 32-64实时信号

进程处理信号

  忽略信号

    SIGKILL和SIGSTOP永远不能被忽略

    忽略硬件异常

    进程启动时SIGUSER1和SIGUSER2两个信号被忽略

  执行默认操作

    每个信号都有默认动作,大部分信号动作是终止信号

 

  捕获信号

    告诉信号内核出现信号是调用自己处理函数

    SIGKILL和SIGSTOP不能被捕获

signal函数信号注册函数void (*signal(int signo,void(*func)(int)))(int);参数signo 要登记的信号值1-64func  信号处理函数指针/忽略信号SIG_IGN/默认信号SIG_DEL若成功返回信号处理函数指针,否则返回SIG_ERR

范列

#include <unistd.h>#include <stdlib.h>#include <signal.h>#include <stdio.h>void set_signal(int signo){    printf("pid: %d,signo: %d\n",getpid(),signo);}int main(){    //SIGTSTP就是ctrl + z    if(signal(SIGTSTP,set_signal) == SIG_ERR)    {        printf("set signal error");    }    //ctrl+c     if(signal(SIGINT,set_signal) == SIG_ERR)    {        printf("set signal error");    }    int i=0;    while(i<30)    {        printf("i : %d\n",i++);        sleep(1);    }    return 0;}

 

一、进程与信号之信号的概念