Linux 進程之間能夠相互發送信號,來發送一些通知,信號能夠攜帶數據(4個字節) ,具體看 sigqueue 函數。ios
若是要使用自定義的信號來發送數據的話,普通訊號只預留了兩個信號 USER1 USER2 ,若是兩個不夠用的話,Linux還提供了實時信號這種東西。centos
用戶能夠定義本身的信號 併發送它,可是數量也不是無限的 目前大概有 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 spa
i get sig test1 1 .net
i get sig test2 2 code