實驗七 訊號

2022-06-04 20:03:09 字數 2286 閱讀 6485

專案

內容所屬課程

作業要求

學號姓名

17043215賴長江

學習目標

1.了解訊號的概念。2.掌握訊號處理的方法。

1.編寫乙個簡單的程式並執行,然後向該程序傳送不同的訊號以觀察該程序對接收到訊號的反應。!

在終端編譯並執行該程式,我們可以在當前終端通過按鍵組合向該程序傳送訊號 ctrl+c 、 ctrl+z 、 ctrl+\ ,大家可以試著 在每一次執行該程式的時候分別通過按鍵傳送不同的訊號來觀察程序的反應。這裡三個按鍵組合說明要 傳送三個訊號,所以我們要執行該程式三次,然後每次使用不同的按鍵組合來觀察。

另外再開啟乙個終端,在終端通過輸入 kill 命令來給程序傳送訊號,程序的 pid 在程式執行的第一 行輸出,每次執行程式的時候 pid 是不同的,這個是大家要注意的。

我們可以在終端通過輸入 kill -l 來檢視當前系統當中的訊號列表:

!(我們可以另開乙個終端,通過 kill 命令向該 程序傳送訊號:

我們編寫乙個簡單的程式,該程式呼叫 kill() 函式向某個程序傳送訊號

使用 signal() 函式來捕捉訊號。

通常程序在接收到某種訊號後,會根據不同的訊號執行預設的操作:

忽略訊號 終止(殺死)程序 產生核心轉儲檔案,同時 終止程序 停止程序 恢復之前被暫停的程序繼續執行

這裡我們可以 通過 signal() 來改變程序對某個訊號的處置方式

通過舉例說明 alarm() 函式和 setitimer() 函式的使用。

雖然程式中有無限迴圈,不斷輸出字串 process will finish! ,由於呼叫了 alarm(1) 函式, alarm 函式會在1秒後給該程序傳送 sigalrm 訊號,然後程序結束。

接下來繼續看乙個程式設定了兩次定時炸彈,第一次設定 5 秒後**,設定後過了 2 秒,再設定了乙個 3 秒後**的定時炸彈。

這裡計時時間到了並不會結束程序,因為我們編寫了訊號捕捉函式,產生 sigalrm 訊號後會輸出字元 串 bomb!! , 我們可以鍵盤按鍵組合結束程序,這裡我用了 ctrl+c 。

接下來我們用 setitimer() 函式實現 alarm() 函式

程式在執行1秒鐘後被 sigalrm 訊號結束。

我們可以編寫乙個列印 sigset_t 的函式

5. 舉例說明對阻塞訊號與未決訊號的理解 在乙個程序中,儲存了兩個訊號集(在pcb中),分別是阻塞訊號集,還有乙個未決訊號集。當你使用 sigprocmask 的時候,就會修改阻塞訊號集。

當你的程序一收到訊號且該訊號被阻塞,它首先進入到未決訊號集中(就是乙個 sigset_t ),當未決 訊號集中的訊號被訊號處理函式(你自己定義的或者系統預設的)處理,就會從未決訊號集中刪除。

如果乙個訊號加入阻塞訊號集,該訊號的訊號處理函式就不會被呼叫。

6. 舉例說明 sigaction() 函式的使用

不同於 signal 函式, sigaction 函式是符合 posix 標準的,而 signal 只是 ansi c 定義的函式。 除了上面的區別外, sigaction 提供了更多的功能。比如它可以處理帶引數的訊號,在訊號處理的時 候,可以遮蔽其它訊號等等。我們通過 man 2 sigaction 來檢視手冊:

實驗七 訊號

專案 內容這個作業屬於哪個課程 這個作業的要求在 學號 姓名 17041530 嚴喆皓 作業學習目標 1 了解訊號的概念 2 掌握訊號處理的方法 1.編寫乙個簡單的程式並執行,然後向該程序傳送不同的訊號以觀察該程序對接收到訊號的反應。1 在當前終端通過按鍵組合向該程序傳送訊號 ctrl c ctrl...

訊號發生實驗總結

訊號發生實驗總結 一 概述 分析思路 1.原理 產生連續訊號的方法有兩種,一種是查表法,另一種是我們常用的計算法。查表法,即將要輸出的資料計算好,儲存在 dsp中,然後依次輸出。查表法,速度快,可以產生較高頻率的波形,而且不占用 dsp的計算時間,但是占用 dsp儲存空間較大。計算法,即用計算的方法...

VxWorks實驗八 訊號

實驗八訊號 1 實驗目的 1 學習使用訊號 2 實驗內容 在實驗一建立的 project 中,編寫一段訊號處理程式,將其與sigint 相關連,使用kill 傳送sigint 訊號並呼叫訊號處理程式。觀察執行結果。3 實驗裝置及工具 1 硬體 a pc 機 2 軟體 a pc 機作業系統window...