Linux信号通信使用kill()和signal()以及wait()

任务

       一个进程(父进程)等待另一个死循环的进程(子进程)先结束并向自己BYEBYE后,自己再结束。

思路

       父进程主动发送一个信号给子进程,子进程收到信号后开始准备结束。子进程中设置信号处理函数,提前结束自己,并向父进程“BYEBYE”.

流程图

 

Linux信号通信使用kill()和signal()以及wait()_第1张图片

Linux信号通信使用kill()和signal()以及wait()_第2张图片

代码

#include"stdio.h"

#include"unistd.h"

#include"signal.h"

#include"stdlib.h"

#include"wait.h"

void handle(int i){

printf("bye bye!\n");

exit(0);

}

int main(){

pid_t pid = fork();

if(pid == 0){

signal(SIGUSR1,handle);

while(1);

exit(0);

}

if(pid > 0){

kill(pid,SIGUSR1);

wait(NULL);

printf("father stop\n");

exit(0);

}

return 0;

}

总结

1.liunx中信号(signal)是进程间通信的机制,进程收到信号后会进行某种操作。

信号的发出可以由键盘中按键组合,某种命令,函数,硬件后者内核发出给进程。

Linux定义了64中信号,分别有不同的功能。程序员也可以自己编写信号处理函数来自定义某种信号的功能。

使用signal()函数注册信号处理函数。

Linux信号通信使用kill()和signal()以及wait()_第3张图片

 

2.使用kill()函数发送信号。

Linux信号通信使用kill()和signal()以及wait()_第4张图片

 

Kill函数可以设置接受信号的进程id,已经发送的信号。

3.wait()函数的功能是进程自己阻塞自己,直到该进程的子进程结束才被唤醒。

4.本题目的逻辑如上图所示。

你可能感兴趣的:(操作系统)