Linux 进程间通信之信号

信号(signal)
在说信号之前,先来谈谈硬中断和软中断,硬中断就是我们的硬件模拟的中断,比如我们敲击键盘,Linux本来在运行或者休眠,这个时候发出一个中断,来响应我们的事件,软中断就是从程序上模拟的中断,我们可与在程序中给系统发送一个信号,来响应中断,可以用kill -l来查看系统支持哪些中断
这里写图片描述
我们只查几个看看什么意思
SIGINT
程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程

SIGKILL
用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个信号

SIGSTOP
暂停执行

其他的请读者自行查询

我们可以通过raise函数来给进程自身发送信号,来看一个例子
这里写图片描述

执行结果
这里写图片描述

可以看到进程暂停了。

raise只能给进程自身发送信号,我们可以用kill函数,来给别的进程发送信号
比如我们想在另外一个进程中杀死刚刚这个进程,先来看看刚刚进程的进程号
这里写图片描述

2174
我们再来写一个程序
这里写图片描述

运行结果:
这里写图片描述

我们也可以用alarm函数发送SIGALARM 终止信号
这里写图片描述

我们写个死循环,3秒后就会终止
这里写图片描述

pause()函数是等待信号,我们修改下刚才的函数
这里写图片描述

把死循环去掉,用pause来等待信号,执行结果是一样的
这里写图片描述

我们可以在收到某一个信号的时候,自己做一些处理,
需要注册处理的句柄函数,
用到signal函数
然后再句柄函数中自己做处理
typedef void (*sighandler_t)(int)
sighandler_t signal(int signum, sighandler_t handler);

sighandler_t是一个函数指针

我们来看例子:
看例子之前,先再看两个信号的意思
SIGINT
程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。
SIGQUIT
和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号
这里写图片描述

运行结果:
这里写图片描述

好了,Linux进程间通信之信号就总结到这里,如有问题,欢迎指正,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值