进程间的信号通信

1.信号通信:
信号(signal)机制是Unix系统中最为古老的进程间通信机制,很多条件可以产生一个信号:
(1)当用户按某些按键时,产生信号。    
(2)硬件异常产生信号:除数为0,无效的存储访问等等。这些情况通常由硬件检测到,将其通知内核,然后内核产
生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个SIGSEGV信号。     
(3)进程用kill函数将信号发送给另一个进程。
(4)用户可用kill命令将信号发送给其他进程。
2.信号类型:
下面是几种常见的信号:
(1)SIGHUP: 从终端上发出的结束信号。
(2)SIGINT: 来自键盘的中断信号(Ctrl-C)。
(3)SIGKILL:该信号结束接收信号的进程,杀死进程。
(4)SIGTERM:kill 命令发出的信号。
(5)SIGCHLD:子进程停止或结束时通知父进程。
(6)SIGSTOP:来自键盘(Ctrl-Z)或调试程序的停止执行信号,暂停进程。
3.信号处理:
当某信号出现时,将按照下列三种方式中的一种进行处理:
(1)忽略此信号:大多数信号都按照这种方式进行处理,但有两种信号决不能被忽略,它们是:SIGKILL\SIGSTOP。
这两种信号不能被忽略的原因是:
它们向超级用户提供了一种终止或停止进程的方法。
(2)执行用户希望的动作:
通知内核在某种信号发生时,调用一个用户函数。在用户函数中,执行用户希望的处理。
(3)执行系统默认动作:
对大多数信号的系统默认动作是终止该进程。
4.几个有关信号处理的函数:
 (1)kill
 函数功能:发送信号给指定的进程
 函数的原型: int kill(pid_t pid, int sig);
 函数的参数:传送指给定的sig信号给参数pid;
                       pid > 0: 进程号为pid的进程;
                       pid = 0; 把信号传给和目前进程同进程组的所有进程;
                       pid = -1,  把信号给系统内所有的进程;
                       pid  <0 ;  传给进程组号为pid绝对值的所有进程;
  返回值:   成功为0,出错-1;
  头文件:  #include <sys/types.h>
            #include <signal.h> 
    
(2) raise
函数的作用:向进程自身发送一个信号;
函数的原型: int  raise(int sig);
返回值:成功是0,出错-1;
头文件:#include <signal.h>
(3)alarm
函数的作用:设置闹钟信号,scod时间后SOGALRM信号传送给目前的进程;
函数的原型: unsigned int alarm(unsigned int sceconds);
返回值: 返回之前闹钟的剩余秒数, 未设闹钟返回0;
(4) pause
函数的作用:  市当前进程挂起,直至捕获到一个信号;
函数的原型:int  pause(void)
头文件: #include <unistd.h>
(5)signal
函数的作用:  设置信号处理方式
函数的原型:void ( * signal (int signum, void  ( *handler ) (int) ) )(int)
这样看函数很难理解,我们可以对其进行下面的操作,就容易理解
typedef   void (*handler) (int) ) sighandler_t
signal (int signum, sighandler_t handler);
函数说明:signal()会依参数signum指定的信号编号来设置该信号的处理函数,当指定信号到达时就会跳转到参数
handler指定的函数执行。如果参数handler不是函数指针,则必须是下列两个常量之一:
SIG_IGN:忽略参数signum指定的信号。
SIG_DFL:将参数signum指定的信号重设为核心预设的信号处理方式。
返回值:返回先前的信号处理函数,如果出错则返回-1。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值