signal 进程通信

12 篇文章 0 订阅

先看send:
1. 定义信号量函数

static void sighandler(int signo)
{
        sigval tid;
        tid.sival_int = signo;
        cout << pid <<" " << signo << endl;
        sigqueue(pid, SIGWINCH, tid); // 发送给接收端信号量和内容
}
  1. 注册信号量
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_handler = sighandler;
sigaction(SIGSEGV, &sa, NULL);
sigaction(SIGBUS, &sa, NULL);
sigaction(SIGILL, &sa, NULL);
sigaction(SIGABRT, &sa, NULL);
sigaction(SIGFPE, &sa, NULL);

再看recv端
1. 注册SIGWINCH信号量


signal(SIGWINCH, sighandler);
  1. 设置SIGWINCH信号量阻塞
sigset_t sset;
sigemptyset(&sset);
sigaddset(&sset, SIGWINCH);
sigprocmask(SIG_BLOCK, &sset, NULL);
  1. 阻塞住信号
const struct timespec timeout = { 5, 0 };
 for(;;){
                int signo = sigtimedwait(&sset, &info, &timeout);
                if(signo==-1 && errno==-EAGAIN)
                        continue;
                if(signo <= 0) {
                        usleep(100*1000);
                        continue;
                }
                int tid = info.si_int;
                cout << "recv tid " << tid <<endl;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值