IPC之信号


信号的概念

在linux中信号是一个32位的整型值,代表一个简单的信息,每个信号都有一个以SIG开头的名字,其实也就是系统定义的宏。在命令行模式下使用kill -l可以查看当前系统支持的所有信号。
在这里插入图片描述
或者使用man 7 signal查看信号的详细信息
在这里插入图片描述


一、信号的产生

信号由内核产生,有三种方式可以使得内核产生信号

1.用户操作

如【ctrl+c】

2.进程执行出错

数据的溢出。

3.进程执行系统调用

调用kill向某个进程发送信号。

二、信号的响应方式

1.忽略信号

#include<stdio.h>
#include <signal.h>
void handler(int signum)
{
	printf("signum is %d\n",signum);
	switch(signum)
	{
		case SIGINT://2
		printf("I get signal!\n");
	     break;
	default:
	     printf("other signal!\n");
	}
}
int main()
{
//       typedef void (*sighandler_t)(int);

//       sighandler_t signal(int signum, sighandler_t handler);
	int count=0;
	if(signal(SIGINT,SIG_IGN)!=SIG_ERR)
	//if(signal(SIGINT,handler)!=SIG_ERR)
	{
		while(1)
		{
			sleep(2);
			printf("count=%d\n",count);
			count++;
		}
	}

	return 0;

运行结果:
在这里插入图片描述

用户按下ctrl+c无回应,即忽略信号

2.执行系统默认操作

#include<stdio.h>
#include <signal.h>
int main()
{
//       typedef void (*sighandler_t)(int);

//       sighandler_t signal(int signum, sighandler_t handler);
	int count=0;
	//if(signal(SIGINT,SIG_IGN)!=SIG_ERR)
	//if(signal(SIGINT,handler)!=SIG_ERR)
	{
		while(1)
		{
			sleep(2);
			printf("count=%d\n",count);
			count++;
		}
	}


	return 0;
}

运行结果
在这里插入图片描述
用户执行ctrl+c程序结束运行

3.捕捉信号

在这里插入图片描述
用户按下ctrl+c信号处理函数捕捉信号并输出对应的语句,但是程序还是在while循环,没有退出。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值