进程与信号之信号的概念

Posted jmst

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程与信号之信号的概念相关的知识,希望对你有一定的参考价值。

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

  信号是软件中断

  信号是异步事件

  信号来源:内核产生,常用信号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-64
func  信号处理函数指针/忽略信号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;
}

 

以上是关于进程与信号之信号的概念的主要内容,如果未能解决你的问题,请参考以下文章

Linux之信号详解

Linux之信号详解

信号量的基本概念与使用semget,semop

进程相互作用之信号量PV操作及其代码实现

linux进程间通信之Posix 信号量用法详解代码举例

进程同步工具之 信号量机制