(linux的signal)
c語言signal函數的應用?
signal是一個系統調用。是一種特殊的中斷,當某種特定的“軟件中斷”發生時。用于調用的程序。中斷通常是程序運行中出現的特殊情況,如引用特殊內存中的非法地址, 浮點數被0除。
signal()的原型為:
#include <signal.h>
void(*signal(int hum,void(*func)(int)))(int)。
signal中的int參數及其含義
SIGHUP 1 A 終端掛起或者控制進程終止
SIGINT 2 A 鍵盤中斷(如break鍵被按下)
SIGQU99v 3 C 鍵盤的退出鍵被按下
SIGILL 4 C 非法指令
SIGABRT 6 C 由abort(3)發出的退出指令
SIGFPE 8 C 浮點異常
SIGKILL 9 AEF Kill信號
SIGSEGV 11 C 無效的內存引用
SIGPIPE 13 A 管道破裂: 寫一個沒有讀port的管道
SIGALRM 14 A 由alarm(2)發出的信號
SIGTERM 15 A 終止信號
SIGUSR1 30,10,16 A 用戶自己定義信號1
SIGUSR2 31,12,17 A 用戶自己定義信號2
SIGCHLD 20,17,18 B 子進程結束信號
SIGCONT 19,18,25 進程繼續(曾被停止的進程)
SIGSTOP 17,19,23 DEF 終止進程
SIGTSTP 18,20,24 D 控制終端(tty)上按下停止鍵
SIGTTIN 21,21,26 D 后臺進程企圖從控制終端讀
SIGTTOU 22,22,27 D 后臺進程企圖從控制終端寫
以下的信號沒在POSIX.1中列出,而在SUSv2列出
SIGBUS 10,7,10 C 總線錯誤(錯誤的內存訪問)
SIGPOLL A Sys V定義的Pollable事件,與SIGIO同義
SIGPROF 27,27,29 A Profiling定時器到
SIGSYS 12,-,12 C 無效的系統調用 (SVID)
SIGTRAP 5 C 跟蹤/斷點捕獲
SIGURG 16,23,21 B Socket出現緊急條件(4.2 BSD)
SIGVTALRM 26,26,28 A 實際時間報警時鐘信號(4.2 BSD)
SIGXCPU 24,24,30 C 超出設定的CPU時間限制(4.2 BSD)
SIGXFSZ 25,25,31 C 超出設定的文件限制大小(4.2 BSD)
(對于SIGSYS。SIGXCPU。SIGXFSZ。以及某些機器體系結構下的SIGBUS,Linux缺省的動作是A (terminate),SUSv2 是C (terminate and dump core))。
以下是其他的一些信號
信號 值 處理動作 發出信號的原因
SIGIOT 6 C IO捕獲指令,與SIGABRT同義
SIGEMT 7,-,7
SIGSTKFLT -,16,- A 協處理器堆棧錯誤
SIGIO 23,29,22 A 某I/O操作如今能夠進行了(4.2 BSD)
SIGCLD -,-,18 A 與SIGCHLD同義
SIGPWR 29,30,19 A 電源故障(System V)
SIGINFO 29,-,- A 與SIGPWR同義
SIGLOST -,-,- A 文件鎖丟失
SIGWINCH 28,28,20 B 窗體大小改變(4.3 BSD, Sun)
SIGUNUSED -,31,- A 未使用的信號(will be SIGSYS)
Linux下如何獲取網卡信息?
查看 linux 的網卡信息步驟如下:工具原料:linux操作系統①啟動 linux 操作系統,進入到桌面;
②啟動終端;
③終端輸入命令 ifconfig eth0,回車;④linux 的網卡信息解讀:
1.查看網卡生產廠商和信號:查看基本信息:lspci查看詳細信息:lspci -vvv # 3個小寫的v查看網卡信息:lspci | grep Ethernet;
2.查看網卡驅動:查看網卡驅動信息:lspci -vvv # 找到網卡設備的詳細信息,包括網卡驅動# lsmod 列出加載的所有驅動,包括網卡驅動;
3.查看網卡驅動版本查看模塊信息:modifo<module name> # 其中包含version信息或 # ethtool-i <device name>;
4.查看網絡接口隊列數查看網卡接口的中斷信息:#cat /proc/interrupts | grep eth0或 # ethtool-S eth0;
5.查看網卡驅動源碼的版本號解壓Intel網卡驅動源碼,打開解壓縮目錄下的*.spec文件查看驅動的版本;
信號he是指什么?
信號he是指的是信號的篇幅較少,就把他和信號量放在一起了信號:(signal)是一種處理異步事件的方式。信號時比較復雜的通信方式,用于通知接受進程有某種事件發生,除了用于進程外,還可以發送信號給進程本身。
linux除了支持unix早期的信號語義函數,還支持語義符合posix.1標準的信號函數
為什么linux里的信號發送函數叫kill呢?
父進程會比子進程提早結束,在你子進程取ppid這個時間父進程已經結束了,這個時候相當于子進程變成zombie,會被init收養(這個地方我也不太懂,正常來說應該子進程的ppid是1,說明你的子進程被init之外的進程收養了)阻塞父進程或者while1的作用是不讓父進程結束,以便子進程取值的時候父進程依然保留
linux信號量線程進程區別?
信號量在進程是以有名信號量進行通信的,在線程是以無名信號進行通信的,因為線程linux還沒有實現進程間的通信,所以在sem_init的第二個參數要為0,而且在多線程間的同步是可以通過有名信號量也可通過無名信號,但是一般情況線程的同步是無名信號量,無名信號量使用簡單,而且sem_t存儲在進程空間中,有名信號量必須LINUX內核管理,由內核結構struct ipc_ids 存儲,是隨內核持續的,系統關閉,信號量則刪除,當然也可以顯示刪除,通過系統調用刪除,
消息隊列,信號量,內存共享,這幾個都是一樣的原理。,只不過信號量分為有名與無名
總結
以上是生活随笔為你收集整理的(linux的signal)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maven 部署nexus_设置本地Ne
- 下一篇: quasar 异步回调_Java IO基