Linux筆記--訊號通訊
阿新 • • 發佈:2020-12-22
介紹
訊號時Linux提供的一種用於程序間通訊的機制,使用方式類似中斷或者定時器,都是先繫結再觸發。
函式
//傳送訊號
int kill(pid_t pid,int sig);
//繫結訊號與處理函式
void (*signal(int sig, void (*func)(int)))(int)
舉例
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
int t;
pid_t pid;
void print(){
printf("Hello\n");
exit(0);
}
int main(){
pid = fork();
if(pid > 0){
signal(SIGUSR1,print);
sleep(1);
}
else if(pid ==0){
kill(getppid(),SIGUSR1);
}
else{
perror("fork");
exit(1);
}
return 0;
}
在父程序中繫結訊號與處理函式,子程序中觸發訊號,傳送給父程序。
訊號型別
1) SIGHUP 2 ) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24 ) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1
36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5
40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9
44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13
52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9
56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5
60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1
64) SIGRTMAX
編號為1 ~ 31的訊號為傳統UNIX支援的訊號,是不可靠訊號(非實時的),編號為32 ~ 63的訊號是後來擴充的,稱做可靠訊號(實時訊號)。不可靠訊號和可靠訊號的區別在於前者不支援排隊,可能會造成訊號丟失,而後者不會。