通过信号量进行进程通信的小例子

43 篇文章 4 订阅

如果我们需要完成以下的要求

在main函数中创建一个子进程实现通信:利用信号实现进程通信。

父进程任务:循环打印“I am  father process!,I  am waiting for signal,My PID is ......”。要求把自己的进程号同时打印出来,父进程同时还等待发来的SIGINT信号和SIGKILL信号,当第一次收到SIGINT信号时,打印“I have received SIGINT signal”,但此时不退出,继续循环执行;当收到子进程利用kill函数发来的SIGKILL信号时,则终止进程。

子进程任务:循环打印“I am  son process !”。5秒钟之后,子进程向父进程利用kill函数发送SIGKILL信号。在此期间,若父进程收到SIGINT信号,则打印“I have received SIGINT signal”。

则所需要的程序代码如下

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>

int pid;
void ouch1(int sig)
{
	kill(pid,SIGKILL);
	alarm(5);
}

void ouch2(int sig)
{
	printf("I recived SIGINT\n");
}


void main()
{
	int n,fd[2];
	
	int i;


	if (pipe(fd) < 0)
		return 1;
	if ((pid=fork()) < 0)
		return 1;
	else if (pid == 0)	//ZI进程
	{
		alarm(5);	
		signal(SIGALRM, ouch1);
		signal(SIGINT,ouch2);
		while(1)
		{		
			printf("I am son process !\n");
			sleep(1);
		}
	}
	else	//FU进程
	{
		signal(SIGINT,ouch2);
		signal(SIGKILL,SIG_DFL);
		while(1)
		{
		printf("I am  father process!,I  am waiting for signal,My PID is %d\n",getpid());
		sleep(2);
		}
	}


}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daijingxin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值