10.訊號signal
阿新 • • 發佈:2018-12-15
1.訊號由[核心]產生髮送的 2.訊號的狀態 產生 未決:未處理,等待被程序處理 遞達:已經處理 3.處理方式 忽略 捕捉 執行了預設的操作:man 7 signal Term 終止 Ign 忽略 Core 終止後,產生core檔案,用於除錯 Stop 暫停 Cont 繼續執行 4. 訊號 值 動作 說明 ───────────────────────────────────────────────────────────────────── SIGHUP 1 A 在控制終端上是掛起訊號, 或者控制程序結束 SIGINT 2 A 從鍵盤輸入的<ctrl+C>,終止程序 ** SIGQUIT 3 C 從鍵盤輸入的<ctrl+\>退出 ** SIGILL 4 C 無效硬體指令 SIGABRT 6 C 非正常終止, 可能來自 abort(3) ** SIGFPE 8 C 浮點運算例外 SIGKILL 9 AEF 殺死程序訊號 ** SIGSEGV 11 C 無效的記憶體引用 ** SIGPIPE 13 A 管道中止: 寫入無人讀取的管道 ** 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 終端上發出的停止訊號 SIGTTIN 21,21,26 D 後臺程序試圖從控制終端(tty)輸入 SIGTTOU 22,22,27 D 後臺程序試圖在控制終端(tty)輸出 5.概念:阻塞訊號集/未決訊號集 PCB 不能直接操作 阻塞訊號集:要遮蔽的訊號 未決訊號集:沒有被處理的訊號的集合
2.訊號相關函式
1.kill--傳送訊號給指定程序:int kill(pid_t pid, int sig); pid>0:發訊號給指定的程序 pid=0:呼叫kill函式的程序的(同一組的所有程序) pid<-1:取|pid|發給對應程序組 pid=-1:傳送給程序有許可權傳送的系統中所有程序 2.raise--自己給自己發訊號:int raise(int sig); 等價於:kill(getpid(),int sig); 3.abort--給自己傳送異常終止訊號SIGABRT 在哪個程序中呼叫abort函式,哪個程序就會終止,併發送SIGABRT訊號 4.alarm--設定定時器SIGALRM unsigned alarm(unsigned seconds); 當時間到達之後,alarm函式發出SIGALRM訊號