1. 程式人生 > 其它 >Linux筆記--訊號通訊

Linux筆記--訊號通訊

技術標籤:Linux程序linux多程序

介紹

訊號時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的訊號是後來擴充的,稱做可靠訊號(實時訊號)。不可靠訊號和可靠訊號的區別在於前者不支援排隊,可能會造成訊號丟失,而後者不會。