分类: LINUX
2011-12-29 11:51:36
运行结果为:
[chinsung@thinkpad apue]$ ./a.out &
[1] 2581
[chinsung@thinkpad apue]$ kill -USR1 2581
received SIGUSR1
[chinsung@thinkpad apue]$ kill -USR2 2581
received SIGUSR2
[chinsung@thinkpad apue]$ kill 2581
[1]+ Terminated ./a.out
说明:
void sig_usr(int)为signal handler函数,用于注册信号,其实现也只是将接收到的信号打印出来而已,对SIGUSR1和SIGUSR2两种信号特别一些,直接打印出其信号名。
在main函数中,先是注册了两个信号:SIGUSR1和SIGUSR2,然后是一个死循环,使用pause不断的接收信号,并没有退出循环的相应机制,只能使用kill命令结束进程。
于是到现在,这个小程序便比较容易理解了,程序先使用signal函数将SIGUSR1和SIGUSR2两个信号注册到sig_usr信号处理函数上去,而信号处理函数sig_usr对信号的处理策略为:如果是SIGUSR1或SIGUSR2两种信号,打印出其信号类型,否则打印其信号值。
无意间,我们已经做了一次进程间通信:执行kill命令的进程将SIGUSR1或SIGUSR2信号传送给了进程id为2581的进程,而进程2581收到信号过后,按照约定(注册的信号处理函数)进行了相应的处理(打印进程信息)。