程序間通訊的另外一種方式-----訊號
三、相關的介面函式
總結kill -l 檢視linux系統中定義的所有訊號,程式設計師是不可以自定義訊號
1)kill -訊號的序號 程序的id
例如 kill -9 20000
kill -kill 20000
kill -sigint 20000
2)killall -訊號的序號 程序的名字
ctrl + c預設給當前程序傳送了sigint訊號
linux規定的訊號絕大部分預設動作都是終止程序,具體如下:
1
) sighup 2
) sigint 3
) sigquit 4
) sigill 5
) sigtrap
6) sigabrt 7
) sigbus 8
) sigfpe 9
) sigkill 10
) sigusr1
11) sigse** 12
) sigusr2 13
) sigpipe 14
) sigalrm 15
) sigterm
16) sigstkflt 17
) sigchld 18
) sigcont 19
) sigstop 20
) sigtstp
21) sigttin 22
) sigttou 23
) sigurg 24
) sigxcpu 25
) sigxfsz
26) si**talrm 27
) sigprof 28
) sigwinch 29
) sigio 30
) sigpwr
31) sigsys 34
) sigrtmin 35
) sigrtmin+136
) sigrtmin+237
) sigrtmin+338
) sigrtmin+439
) sigrtmin+540
) sigrtmin+641
) sigrtmin+742
) sigrtmin+843
) sigrtmin+944
) sigrtmin+
1045
) sigrtmin+
1146
) sigrtmin+
1247
) sigrtmin+
1348
) sigrtmin+
1449
) sigrtmin+
1550
) sigrtmax-
1451
) sigrtmax-
1352
) sigrtmax-
1253
) sigrtmax-
1154
) sigrtmax-
1055
) sigrtmax-956
) sigrtmax-857
) sigrtmax-758
) sigrtmax-659
) sigrtmax-560
) sigrtmax-461
) sigrtmax-362
) sigrtmax-263
) sigrtmax-164
) sigrtmax 總共62個訊號
1) 標頭檔案 signal.h
2) int kill(pid_t pid,int sig)
引數:pid --> 你要傳送訊號的那個程序id
sig --> 你要傳送的那個訊號的序號
1)void (*signal(int sig,void(*func)(int)))(int);
void (函式名(引數1,引數2)(int);
返回值 :函式指標 void()(int)
引數 :sig -->你要捕捉的訊號的序號或者名字
void(*func)(int) -->你捕捉到訊號以後,需要改變的動作就通過這個函式實現
2)注意 : 第一點:有兩個訊號是不能改變他們的預設動作也不能忽略,sigkill和sigstop
第二點:signal函式總共有三種用法
用法一:改變訊號的預設動作signal(某個訊號,函式);
用法二:忽略訊號signal(某個訊號,sig_ign);忽略訊號,訊號傳送過來以後直接捨棄,左耳進右耳出,當做不存在
用法三:使用訊號的預設動作 signal(某個訊號,sig_dfl);
**如下(示例):
//自定義乙個函式實現捕捉到sigint訊號以後的動作
void
catchint
(int sig)
intmain()
}
一、訊號的傳送(是kill的公升級版,傳送訊號的時候可以攜帶額外資料)
int sigqueue(pid_t pid,int sig,const union si**al value);
引數 :value -->傳送訊號需要攜帶的額外資料就儲存在這個聯合體
union si**al
/*
sigqueue傳送訊號攜帶額外資料
*/int
main
(int argc,
char
**ar**)
/*
void catchint(int sig,siginfo_t *info, void *arg)
*/void
catchint
(int sig)
intmain()
程序間通訊之訊號
訊號是軟體中斷。很多比較重要的應用程式都需要處理訊號。訊號提供了一種處理非同步事件的方法。每個訊號都有乙個名字,並且他們的名字都是以sig開頭的。訊號的處理或相關動作有三種處理方式 1 預設訊號 sig dfl 2 忽略訊號 sig ign 大多數訊號可採用,除sigkill和sigstop外。3 ...
程序間通訊之管道講解
三 有名管道相關操作 總結通訊要解決的實際問題,就是多個程序之間如何實現資料的收發 分為兩種 有名管道,無名管道 屬於半雙工 全雙工 通訊雙方在任何時刻都能互相收發資訊,收發資訊可以同時進行不受任何影響 半雙工 通訊雙方在任意時刻都只能是一方發生,一方接收,不能同時兩邊都收發 父子程序採用無名管道通...
linux程序間通訊之訊號
1 wait 函式 原型 pid t wait int status 子程序退出時,它向父程序傳送乙個sigchld訊號,預設情況是總是忽略sigchld訊號,此時程序狀態一直保留在記憶體中,因此需要父程序去處理改訊號,處理的辦法則是呼叫wait 函式,收集子程序狀態資訊,並清空該資訊 使用wait...