进程间的信号通信

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。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值