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

任务

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

思路

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

流程图

 

代码

#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()函数注册信号处理函数。

 

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

 

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值