1. 程式人生 > >嵌入式Linux併發程式設計,程序間通訊方式,訊號,訊號機制,檢視新號kill -l,常用訊號,發訊號命令kill [-signal] pid、killall [-u user | prog]

嵌入式Linux併發程式設計,程序間通訊方式,訊號,訊號機制,檢視新號kill -l,常用訊號,發訊號命令kill [-signal] pid、killall [-u user | prog]

1,訊號機制

  1. 訊號是在軟體層次上對中斷機制的一種模擬,是一種非同步通訊方式 (一個程序在任何條件下,都可以隨時的接收訊號,不需要其他的處理)
  2. Linux核心通過訊號通知使用者程序,不同的訊號型別代表不同的事件
  3. Linux對早期的unix訊號機制進行了擴充套件
  4. 程序對訊號有不同的響應方式 · 預設方式 ·忽略訊號 ·捕捉訊號

2,kill -l檢視當前系統中所有的訊號型別(前31種訊號被成為不可靠訊號)

[email protected]:~/test/pthread$ kill -l
 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 16) SIGSTKFLT 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
  • 不可靠訊號:前面31種是早期的Unix中就已經引入的訊號型別,Linux繼承了過來。早期的訊號不支援訊號的排隊,有可能會造成訊號的丟失,所以前31種訊號又被成為不可靠訊號
  • 為了克服不可靠訊號的缺點,Linux中又引入了一些可以排隊的,不會丟失的訊號

3,常用訊號

訊號名 含義 預設操作
SIGHUP 該訊號在使用者終端關閉時產生,通常是發給和該終端關聯的會話內的所有程序 終止
SIGINT 該訊號在使用者鍵入INTR字元(Ctrl-C)時產生,核心傳送此訊號送到當前終端的所有前臺程序 終止
SIGQUIT 該訊號和SIGINT類似,但由QUIT字元(通常是Ctrl-\)來產生 終止
SIGILL 該訊號在一個程序企圖執行一條非法指令時產生 終止
SIGSEV 該訊號在非法訪問記憶體時產生,如野指標、緩衝區溢位(段錯誤) 終止
SIGPIPE 當程序往一個沒有讀端的管道中寫入時產生,代表“管道斷裂” 終止
SIGKILL 該訊號用來結束程序,並且不能被捕捉和忽略 終止
SIGSTOP 該訊號用於暫停程序,並且不能被捕捉和忽略 暫停程序
SIGTSTP 該訊號用於暫停程序,使用者可鍵入SUSP字元(通常是Ctrl-Z)發出這個訊號(當前終端的前臺程序在後臺掛起) 暫停程序
SIGCONT 該訊號讓程序進入執行態 暫停程序
SIGALRM 該訊號用於通知程序定時器時間已到 終止
SIGUSR1/2 該訊號保留給使用者程式使用 終止

4,訊號相關命令—向一個程序或一個程序組發命令kill [-signal] pid、killall [-u user | prog]

  1. kill [-signal] pid ·預設傳送SIGTERM ·-sig 可指定訊號 · pid 指定傳送物件(程序號)

pid有三種物件

kill -9 6437    //給一個程序發SIGKILL訊號
kill -9 -8126   //給一個程序組發SIGKILL訊號,8126是程序組組號
kill -9 -1      //給除系統INIT程序和當前程序外的所有程序發SIGKILL訊號
  1. killall [-u user | prog] ·prog 指定程序名 ·user 指定使用者名稱

killall發訊號也可以指定訊號型別,預設傳送SIGTERM

killall a.out       //給系統中所有執行a.out的程序傳送SIGTERM訊號
killall -u linux    //給所有linux使用者建立的程序傳送SIGTERM訊號