信号

1、信号的种类
命令:kill -l (62个)
2、信号的来源:软件、硬件
SIGINT(2号):Ctrl + C
Ctrl+\(3号) :SIGQUIT
SIGINT的默认处理动作是终止进程,而SIGQUIT的默认处理动作是终止进程并且Cor Dump
3、信号的产生

  • kill函数(给指定进程发信号)
    int kill(pid_t pid, int sig);

  • raise函数(自己给自己发信号)
    int raise(int sig);

4、信号的处理
进程接收到一个信号后有三种处理方式:
1)默认处理,通常是强制结束
2)忽略处理
9号(SIGKILL)和19号(SIGSTOP即ctrl+z)这两个信号不可忽略
3)自定义处理(软件中断(异步)有就处理)

#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>//函数的参数可以为数据,也可以为操作(函数指针)
void signal_handler(int signum) //回调函数
{
    if(signum== SIGINT)
            printf("hahahah\n");
    else if(signum== SIGUSR2)
        printf("你好,cmz\n");     //满足条件时自动调用,不需要显示调用
}
void main()
{
    signal(SIGUSR1,SIG_IGN);//忽略SIGUSR1信号
    signal(3,SIG_IGN);//忽略SIGQUIT信号,参数1可为信号编号,通过kill -l查出

    // typedef void (*sighandler_t)(int);  指定函数结构
    //  sighandler_t signal(int signum, sighandler_t handler);
                           //信号编号      函数名

    signal(SIGINT,signal_handler);//即Ctrl+C信号//为信号注册处理函数
    signal(SIGUSR2,signal_handler);//多个信号可以共用一个处理函数
    while(1)                       //函数通过传过来的参数判断处理哪个信号
    {                             //想用几个信号就注册几个singnal

        printf("hello\n");
        sleep(1);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值