实验四进程间通信(信号量机制实验).ppt
实验五实验五 进程间通信进程间通信(信号量机制实验)(信号量机制实验)1 1、信号、信号 信号机制是信号机制是LINUXLINUX为进程中断处理而设为进程中断处理而设置的。它只是一组预定义的值,因此不能置的。它只是一组预定义的值,因此不能用于信息交换,仅用于进程中断控制。用于信息交换,仅用于进程中断控制。2 2、信号来源、信号来源硬件来源(比如按下键盘或硬件故障)硬件来源(比如按下键盘或硬件故障)软件来源(常用发送信号的系统函数软件来源(常用发送信号的系统函数 kill)3 3、信号的发送、信号的发送kill()-kill()-传送信号给指定的进程传送信号给指定的进程系统调用格式系统调用格式 int kill(pid,sig)int kill(pid,sig)参数定义参数定义 int pid,sig;int pid,sig;其中,其中,pidpid是一个或一组进程的标识是一个或一组进程的标识符,参数符,参数sigsig是要发送的软中断信号。是要发送的软中断信号。4 4、进程对信号的响应、进程对信号的响应进程可以通过三种方式来响应一个信号:进程可以通过三种方式来响应一个信号:忽略信号忽略信号 对信号不做任何处理;对信号不做任何处理;捕捉信号捕捉信号 定义信号处理函数,当信号发生时,执定义信号处理函数,当信号发生时,执行相应的处理函数;行相应的处理函数;执行缺省操作执行缺省操作5 5、信号的安装(设置信号关联动作)、信号的安装(设置信号关联动作)系统调用格式:系统调用格式:signal(sig,function)signal(sig,function)参数定义:参数定义:参数定义:参数定义:int sig;int sig;int sig;int sig;void(*function)();void(*function)();void(*function)();void(*function)();n n函数说明:当指定信号函数说明:当指定信号sig sig 到达时就会跳转到到达时就会跳转到functionfunction指定的函数执行。如果参指定的函数执行。如果参functionfunction不不是函数指针,则必须是下列两个常数之一:是函数指针,则必须是下列两个常数之一:n nSIG_IGN SIG_IGN 忽略参数忽略参数sigsig指定的信号指定的信号(SIG_INT=1)(SIG_INT=1)n nSIG_DFL SIG_DFL 将参数将参数sig sig 指定的信号重设为核心指定的信号重设为核心预设的信号处理方式。预设的信号处理方式。(SIG_DFL=0)(SIG_DFL=0)例如:例如:signal(SIGINT,stop)signal(SIGINT,stop)中的中的SIGINTSIGINT是是来自键盘的中断信号,当键盘有中断信号来自键盘的中断信号,当键盘有中断信号产生时,进程就会转入产生时,进程就会转入stop()stop()做相应处做相应处理。理。signal(10,stop)signal(10,stop)中的中的1010是用户自定义的信是用户自定义的信号,由父进程发出。父进程用号,由父进程发出。父进程用kill(p1,10 kill(p1,10)函数发中断信号函数发中断信号1010给子进程给子进程p1p1,子进程,子进程p1p1在收到父进程发来的中断信号在收到父进程发来的中断信号1010时,就转时,就转入入stop()stop()做相应处理。做相应处理。