信号常见的接口函数

信号

信号是一种特别的IPC,大部分信号是异步的,也就是说,信号的到来是无法预料的。

信号总共有四种响应方式:
第一种:信号的默认响应动作(就是linux系统已经规定好的)
第二种:改变信号的响应动作
第三种:信号的忽略
第四种:信号的阻塞(信号的屏蔽)

以下为Linux的64种信号:
其中SIGSTOP / SIGKILL是无法被忽略和屏蔽的
绝不部分信号默认动作都是终止程序,其中SIGSTOP / SIGKILL是无法被忽略和屏蔽的。

发送信号的两个常用命令:
kill -信号的序号 进程的ID
kill -信号的名字 进程的ID
kill -9 hello
kill -SIGKILL hello
kill -KILL hello
killall -信号的序号 进程的名字
killall -信号的名字 进程的名字
killall -9 hello
killall -SIGKILL hello
killall -KILL hello
3. 相关的接口函数
在这里插入图片描述


void catch_sig(int num)
{
	printf("某个信号被捕捉到了!!!序号是:%d\n",num);
	//kill(getpid(),SIGUSR1);//给某进程发送某信号
}

int main()
{
	printf("本进程的ID号:%lu\n",getpid());
	//捕捉SIGINT
	signal(SIGINT,catch_sig);
	signal(SIGKILL,catch_sig);  //SIGKILL不能被改变响应动作
	signal(SIGSTOP,catch_sig);  //SIGKILL不能被改变响应动作 
	while(1); //防止主函数退出
}

在这里插入图片描述
在这里插入图片描述

int main()
{
    printf("ID:%d\n", getpid());
    sigset_t set;
    sigemptyset(&set);//清空
    sigaddset(&set,SIGINT);//添加信号到信号集
    sigaddset(&set,SIGQUIT);//添加信号到信号集

    //sigaddset(&set,SIGKILL);//此信号无法屏蔽
    //sigaddset(&set,SIGSTOP);//此信号无法屏蔽
    sigprocmask(SIG_BLOCK,&set,NULL);//屏蔽set里面的信号

    while(1);
    //sigpromask(SIG_UNBLOCK,&set,NULL);//接除阻塞
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值