首页 > 代码库 > Linux 进程间通信之使用信号
Linux 进程间通信之使用信号
Linux 进程之间可以相互发送信号,来发送一些通知,信号可以携带数据(4个字节) ,具体看 sigqueue 函数。
如果要使用自定义的信号来发送数据的话,普通信号只预留了两个信号 USER1 USER2 ,如果两个不够用的话,Linux还提供了实时信号这种东西。
用户可以定义自己的信号 并发送它,但是数量也不是无限的 目前大概有 32 个可以使用。
测试代码:
#include <iostream> #include <stdio.h> #include <string.h> #include <signal.h> #include <sys/types.h> #include <unistd.h> #include <stdlib.h> #include <cygwin/signal.h> using namespace std; int SIG_TEST1 = SIGRTMIN + 1; int SIG_TEST2 = SIGRTMIN + 2; static void sig_hdl(int sig, siginfo_t *siginfo, void *ptr) { if (sig == SIG_TEST1) { printf("i get sig test1 %d \n", siginfo->si_value); } if (sig == SIG_TEST2) { printf("i get sig test2 %d \n", siginfo->si_value); } } int main() { struct sigaction st; memset(&st, 0, sizeof(st)); st.sa_flags = SA_SIGINFO; st.sa_sigaction = sig_hdl; sigaction(SIG_TEST1, &st, NULL); st.sa_sigaction = sig_hdl; sigaction(SIG_TEST2, &st, NULL); sigval t; t.sival_int = 1; sigqueue(getpid(), SIG_TEST1, t); t.sival_int = 2; sigqueue(getpid(), SIG_TEST2, t); return 0; }
输出:
[root@centos ~]# ./a.out
i get sig test1 1
i get sig test2 2
Linux 进程间通信之使用信号
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。