linux應用基礎知識點11 IPC之訊號

2021-10-05 03:53:40 字數 2025 閱讀 8425

訊號是內容受限的一種非同步通訊機制,本質是乙個預定義的數字編號。

內容受限——只能傳遞訊號值,不能傳遞更詳細的內容。

非同步——事先並不知道訊號何時發生,類似於中斷都是突然發生的。

發出者:

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 更改...