linux进程间通信-信号通信

信号是软件层次上对中断机制的模拟,异步通信。
可以直接进行用户空间进程和内核进程之间的通信内核通过信号通知用户发生的系统事件。

用户进程队信号的响应方式:

  • 忽略:(除了SIGKILL,SIGSTOP)
  • 捕捉信号:定义差信号处理函数,当信号发生时,执行相关处理函数;
  • 执行默认操作;

信号发送:

1. kill和raise
int kill(pid_t pid, int sig);   //向指定进程发送信号

pid: 指定要来接收信号的进程号;
sig: 信号(可以通过kill -l 来查看可用的信号列表);
return: 0—Success, -1—-Error;

int raise(int sig); //向当前进程(自己)发送信号
2. alarm和pause
uint alarm(uint seconds);       //设置定时器,时间到时,内核向进程发送SIGALARM信号。

return:
success —0或者如果在调用alarm前已经设置了时间,否则返回上个闹钟的剩余时间;
fail — -1;

int pause(void);    //将调用它的进程挂起,直到收到信号为止

信号的处理

处理方式:
1. 使用简单的signal();
2. 使用信号集函数族;

1. 使用signal()
void( *signal(int signum, void(*handler)(int) ) ) (int);

signum:指定的信号
handler:处理函数(三种方式):

①SIG_IGN:忽略;
②SIG_DFL:按默认操作;
自定义的函数指针,注意是函数的指针

例如:

void myfun();   //假设以定义好
...
signal(SIGQUIT,myfun);  
//这样当发生SIGQUIT信号时,回调用myfun(),而不是按系统默认的处理方式:退出结束当前进程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MichaelJay2015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值