#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
/*father process send signal to son*/
//下面这个处理函数只执行了第一行,原因不明
void dd(int a,siginfo_t *t,void *v)
{
printf("a=%d,signo=%d,sigcode=%d,send pid=%d,value=%s\n",a,
t->si_signo,t->si_code,
t->si_pid,(char*)(t->si_ptr));
// sleep(2);
printf("receive value from process,the value equal/n");
}
main()
{
//int r;
pid_t r;
r=fork();
if(r!=0)
{
printf("father process\n");
//father process
sleep(2);
union sigval val;
val.sival_ptr="helloworld";
sigqueue(r,59,val);
}else{
//son process
printf("son process\n");
//registe signal deal function
struct sigaction act={};
act.sa_flags=SA_SIGINFO;
act.sa_sigaction=dd;
sigaction(59,&act,0);
sleep(5000);
while(1);
}
}
本文介绍了一个使用C语言实现的父子进程间通过信号进行通信的例子。重点在于如何利用sigqueue函数向子进程发送带有附加数据的信号,并在子进程中通过sigaction注册信号处理函数来接收这些信号数据。
3601

被折叠的 条评论
为什么被折叠?



