signal信号通信

每个进程只属于一个进程组,进程组由一个正整数进程组ID来标识。
int kill(pid_t pid, int sig);
kill函数用于向进程发送信号,当pid>0,kill发送sig给进程pid;当pid<0kill发送sig给进程组abs(pid)中的每个进程。
unsigned int alarm(unsigned int secs);
alarm函数用于在secs妙内发送一个SIGALRM信号给调用进程。对alarm的调用将取消待处理闹钟,并发挥待处理闹钟发送前剩余妙数。
SIGSTOP、SIGKILL的默认行为不能被修改。
signal函数用于接收信号:
当其第二个形参为SIG_IGN时,忽略类型为第一形参的信号
当其第二个形参为SIG_DFL时,类型为第一形参的信号恢复默认行为。
否则第二形参为信号处理程序的地址。
例子:
#include<stdio.h>
#include<errno.h>
#include<unistd.h>
#include<signal.h>

void handler( int sig )
{
      printf( "catch signal\n" );
      exit( 0 );
}
int main( int argc, char **argv )
{
      if( signal(SIGINT, handler) == SIG_ERR )
              perror( "signal error!" );
      pause();

      exit( 0 );
}
当在键盘上输入ctrl-c时发送SIGINT信号,调用handler函数


当处理多个信号时产生的问题(深入理解计算机系统二511):
1,待处理信号被阻塞
2,待处理信号不会排队等待
任意类型至多只有一个待处理信号。如果两个信号类型一致,并且进程正在执行其中一个信号的信号处理函数,那么第二个传送的信号会被丢弃。
3,系统调用可以被中断
处理程序捕获到一个信号时,被中断的慢速系统调用(read\write\accept等)在信号处理程序返回时不再继续,而是返回一个错误条件,设置errno为EINTR。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值