linux sigaction and sigqueue

本文介绍了一个使用C语言实现的父子进程间通过信号进行通信的例子。重点在于如何利用sigqueue函数向子进程发送带有附加数据的信号,并在子进程中通过sigaction注册信号处理函数来接收这些信号数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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);
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值