父进程与子进程间相互发送信号

  最近想要实现父子进程间的通信,两个进程间能“软中断”,也就是使用signal函数将进程与handler函数绑定。

  其中的难点在于如何在父进程中获取子进程的pid,由于实际的程序中,父进程有唯一的子进程,所以我采用的方法是

直接将父进程的 pid + 1 也就获取了子进程的pid,有一丝奇技淫巧的感觉,but , it works.


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

void father_handler(int sig){
	printf("%d get kill\n" , getpid());
	printf("%d kill %d\n" , getpid() , getpid() + 1);
	
	kill(getpid() + 1 , SIGUSR2);//向子进程发送信号
				     //由于父进程有唯一的子进程所以pid直接加一	
				      		
	return;
}

void child_handler(int sig){
	printf("%d(whose father is %d) get kill\n" , getpid() , getppid());
	printf("%d kill %d \n" , getpid() , getppid());

	kill(getppid() , SIGUSR1);//向父进程发送信号

	return;
}

void father_connect(){ //父进程与handler函数绑定
	if (signal(SIGUSR1 , father_handler) != SIG_ERR){
		printf("father(%d) success \n" , getpid());
	}	
}

void child_connect(){//子进程与handler函数绑定
	if (signal(SIGUSR2 , child_handler) != SIG_ERR){
		printf("child(%d) success \n" , getpid());
		printf("%d kill %d \n" , getpid() , getppid());

		kill(getppid() , SIGUSR1);//触发父进程的handler

	}
}

int main(){
	pid_t pid = fork();
	if (pid > 0){
		father_connect();
	}else{
		child_connect();
	}
	while(1);
}

  由于两个进程间能够互相软中断,我们可以实现很多功能,比如模拟client 与 server 间的通信等等

  之后会用使用这个奇技淫巧做些东西出来

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值