日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

linux内核定义的常用信号6,Linux中的信号

發布時間:2023/11/27 生活经验 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内核定义的常用信号6,Linux中的信号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在 Linux 中,理解信號的概念是非常重要的。這是因為,信號被用于通過 Linux 命令行所做的一些常見活動中。例如,每當你按 Ctrl+C 組合鍵來從命令行終結一個命令的執行,你就使用了信號。每當你使用如下命令來結束一個進程時,你就使用了信號:

kill -9 [PID]

所以,至少知道信號的基本原理是非常有用的。

Linux中的信號

在 Linux 系統(以及其他類 Unix 操作系統)中,信號被用于進程間的通信。信號是一個發送到某個進程或同一進程中的特定線程的異步通知,用于通知發生的一個事件。從 1970 年貝爾實驗室的 Unix 面世便有了信號的概念,而現在它已經被定義在了 POSIX 標準中。

對于在 Linux 環境進行編程的用戶或系統管理員來說,較好地理解信號的概念和機制是很重要的,在某些情況下可以幫助我們更高效地編寫程序。對于一個程序來說,如果每條指令都運行正常的話,它會連續地執行。但如果在程序執行時,出現了一個錯誤或任何異常,內核就可以使用信號來通知相應的進程。

信號同樣被用于通信、同步進程和簡化進程間通信,在 Linux 中,信號在處理異常和中斷方面,扮演了極其重要的角色。信號巳經在沒有任何較大修改的情況下被使用了將近 30 年。

當一個事件發生時,會產生一個信號,然后內核會將事件傳遞到接收的進程。有時,進程可以發送一個信號到其他進程。除了進程到進程的信號外,還有很多種情況,內核會產生一個信號,比如文件大小達到限額、一個 I/O 設備就緒或用戶發送了一個類似于 Ctrl+C 或 Ctrl+Z 的終端中斷等。

運行在用戶模式下的進程會接收信號。如果接收的進程正運行在內核模式,那么信號的執行只有在該進程返回到用戶模式時才會開始。

發送到非運行進程的信號一定是由內核保存,直到進程重新執行為止。休眠的進程可以是可中斷的,也可以是不可中斷的。如果一個在可中斷休眠狀態的進程(例如,等待終端輸入的進程)收到了一個信號,那么內核會喚醒這個進程來處理信號。如果一個在不可中斷休眠狀態的進程收到了一個信號,那么內核會拖延此信號,直到該事件完成為止。

當進程收到一個信號時,可能會發生以下 3 種情況:

進程可能會忽略此信號。有些信號不能被忽略,而有些沒有默認行為的信號,默認會被忽略。

進程可能會捕獲此信號,并執行一個被稱為信號處理器的特殊函數。

進程可能會執行信號的默認行為。例如,信號 15(SIGTERM) 的默認行為是結束進程。

當一個進程執行信號處理時,如果還有其他信號到達,那么新的信號會被阻斷直到處理器返冋為止。

信號的名稱和值

每個信號都有以SIG開頭的名稱,并定義為唯一的正整數。在 Shell 命令行提示符 下,輸入kill -l命令,將顯示所有信號的信號值和相應的信號名,類似如下所示:

[c.biancheng.net]$ 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

信號值被定義在文件 /usr/include/bits/signum.h 中,其源文件是 /usr/src/linux/kernel/signal.c。

在 Linux 下,可以查看 signal(7) 手冊頁來查閱信號名列表、信號值、默認的行為和它們是否可以被捕獲。其命令如下所示:

man 7 signal

下標所列出的信號是 POSIX 標準的一部分,它們通常被縮寫成不帶SIG前綴,例如,SIGHUP 通常被簡單地稱為 HUP。

信?號

默認行為

描?述

信號值

SIGABRT

生成?core?文件然后終止進程

這個信號告訴進程終止操作。ABRT?通常由進程本身發送,即當進程調用?abort() 函數發出一個非正常終止信號時

6

SIGALRM

終止

警告時鐘

14

SIGBUS

生成?core?文件然后終止進程

當進程引起一個總線錯誤時,BUS?信號將被發送到進程。例如,訪問了一部分未定義的內存對象

10

SIGCHLD

忽略

當了進程結束、被中斷或是在被中斷之后重新恢復時,CHLD?信號會被發送到進程

20

SIGCONT

繼續進程

CONT?信號指不操作系統重新開始先前被?STOP?或?TSTP?暫停的進程

19

SIGFPE

生成?core?文件然后終止進程

當一個進程執行一個錯誤的算術運算時,FPE?信號會被發送到進程

8

SIGHUP

終止

當進程的控制終端關閉時,HUP?信號會被發送到進程

1

SIGILL

生成?core?文件然后終止進程

當一個進程嘗試執行一個非法指令時,ILL 信號會被發送到進程

4

SIGINT

終止

當用戶想要中斷進程時,INT 信號被進程的控制終端發送到進程

2

SIGKILL

終止

發送到進程的?KILL?信號會使進程立即終止。KILL 信號不能被捕獲或忽略

9

SIGPIPE

終止

當一個進程嘗試向一個沒有連接到其他目標的管道寫入時,PIPE?信號會被發送到進程

13

SIGQUIT

終止

當用戶要求進程執行?core dump?時,QUIT?信號由進程的控制終端發送到進程

3

SIGSEGV

生成?core?文件然后終止進程

當進程生成了一個無效的內存引用時,SEGV?信號會被發送到進程

11

SIGSTOP

停止進程

STOP?信號指示操作系統停止進程的執行

17

SIGTERM

終止

發送到進程的?TERM?信號用于要求進程終止

15

SIGTSTP

停止進程

TSTP?信號由進程的控制終端發送到進程來要求它立即終止

18

SIGTTIN

停止進程

后臺進程嘗試讀取時,TTIN?信號會被發送到進程

21

SIGTTOU

停止進程

后臺進程嘗試輸出時,TTOU 信號會被發送到進程

22

SIGUSR1

終止

發送到進程的?USR1?信號用于指示用戶定義的條件

30

SIGUSR2

終止

同上

31

SIGPOLL

終止

當一個異步輸入/輸出時間事件發生時,POLL ?信號會被發送到進程

23

SIGPROF

終止

當仿形計時器過期時,PROF?信號會被發送到進程

27

SIGSYS

生成?core?文件然后終止進程

發生有錯的系統調用時,SYS 信號會被發送到進程

12

SIGTRAP

生成?core?文件然后終止進程

追蹤捕獲/斷點捕獲時,會產生?TRAP 信號。

5

SIGURG

忽略

當侖一個?socket?有緊急的或是帶外數據可被讀取時,URG?信號會被發送到進程

16

SIGVTALRM

終止

當進程使用的虛擬計時器過期時,VTALRM 信號會被發送到進程

26

SIGXCPU

終止

當進程使用的?CPU?時間超出限制時,XCPU?信號會被發送到進程

24

SIGXFSZ

生成?core?文件然后終止進程

當文件大小超過限制時,會產生?XFSZ?信號

25

總結

以上是生活随笔為你收集整理的linux内核定义的常用信号6,Linux中的信号的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。