訊號是內容受限的一種非同步通訊機制,本質是乙個預定義的數字編號。
內容受限——只能傳遞訊號值,不能傳遞更詳細的內容。
非同步——事先並不知道訊號何時發生,類似於中斷都是突然發生的。
發出者:
1.終端按鍵
2.硬體異常核心發出訊號
3.使用者發出kill命令
4.某些軟體條件滿足後發出訊號,如alarm時鐘到時間產生sigalarm訊號,向寫端已關閉的管道write時會產生sigpipe訊號。
常見訊號:
sigint 2 ctrl+c時os送給前台程序組中每個程序(注意「前台」、「每個」)
sigpoll(sigio) 6 指示乙個非同步io事件
sigkill 9 殺死乙個程序的訊號
sigpipe 13 涉及管道和socket
sigalarm 14 涉及alarm函式
sigterm 15 kill命令傳送的預設訊號
sigchld 17 子程序終止或停止時,os傳送給父程序的訊號
sigusr1/sigusr2 10/12 使用者自定義訊號
signal函式
sighandler_t signal
(int signum, sighandler_t handler)
;
用於設定某個訊號的處理方式,常用的有下面三種(以sigint為例):
signal(sigint, sig_ign); //設定sigint訊號的處理方式為忽略方式
signal(sigint, sig_dfl); //設定為預設處理方式
signal(sigint, func_***); //使用者定義的處理函式func_***
當signal執行成功時,返回老的處理函式;當執行失敗時,返回sig_err。
sigaction函式
由於繼承自unix系統的signal函式存在移植性不好的問題,這裡提供了符合posix標準的sigaction函式來替代。
int sigaction
(int signum,
const struct sigaction *act, struct sigaction *oldact)
;
1.act和oldact都不為null時,該函式設定新處理函式act,同時獲取舊處理函式oldact;
2.act為null時,可以只獲取而不改變當前處理函式;
3.oldact為null時,可以直接設定新處理函式,不獲取舊處理函式。
alarm函式
unsigned int alarm
(unsigned int seconds)
;
該函式可以實現指定時段到了以後,向此函式的程序發出sigalrm訊號。
如果引數seconds設為0,則關閉之前設定的鬧鐘;
如果之前沒設定過鬧鐘,則返回乙個0;
如果之前設定過鬧鐘,則返回之前鬧鐘剩餘的時間。
pause函式
int pause
(void
);
該函式將程序設為暫停態,可以用訊號喚醒。
綜合應用:
實現乙個類似於sleep的函式。
void alarm_func(int sig) //鬧鐘訊號處理函式
} void mysleep(unsigned int seconds) //自定義睡眠函式
;act.sa_handler = alarm_func;
sigaction(sigalrm, &act, null); //設定鬧鐘訊號的處理函式
alarm(seconds); //設定鬧鐘
pause(); //暫停程序
}
linux基礎知識點
1.在vmware安裝linux系統和快照功能使用。注意 2.系統目錄介紹 1 表示根目錄 2 表示 root 3 etc 存放系統配置目錄 4 home 除了root以為所有使用者預設在home下新建乙個以使用者名為資料夾名稱的資料夾。5 usr 所有使用者安裝的軟體都放入這個資料夾中。知識點擴充...
linux基礎知識點複習
暫時先放一些linux的一些操作的東西 1 vm 虛擬機器 2 redhad 作業系統 3 xshell 終端軟體 4 notepad 編碼 5 課件 思維導圖 mindmanage word ppt xshell nat模式連線 ssh ip位址 注意 1 必須要有網 2 虛擬機器的網絡卡要開啟 ...
linux基礎知識點一
命令的語法 命令 選項 引數 引數 命令操作的物件 選項 命令在操作物件是採用不容的選項即使用不同的方式。基本命令 ls 列出目錄中的內容 list 選項 l 以長格式的方式列出 ll ls l a 列出全部內容,包含隱藏檔案和隱藏目錄 h 以人類易讀的方式顯示 pwd 列印當前工作目錄 cd 更改...