中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux進程信號通信實例分析

發布時間:2022-01-12 15:06:15 來源:億速云 閱讀:141 作者:iii 欄目:互聯網科技

今天小編給大家分享一下linux進程信號通信實例分析的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

在iTOP4412開發板運行中,當我們在win上遇到一個沒有辦法正常關閉的軟件的時候,我們可以打開任務管理器,強制結束這個進程,同理。在linux上也有類似的功能,比如從終端敲入ctrl+c組合鍵來產生一個信號,當運行中的進程捕捉到這個信號后就會做出反應。

我們在win上可以使用快捷鍵進入任務管理器,那么linux中會在哪些情況下會產生信號呢?

linux進程信號通信實例分析

那么linux有多少種信號呢,我們可以通過命令kill命令來查看

我們可以發現,一共有64種信號,每個信號都是以sig開頭,信號的名稱是在signal.h中定義的。

第一部分:信號的發送

我們通過一個小例子來認識下信號的發送:

linux進程信號通信實例分析

這個程序主要用到了kill函數, 因為用戶空間是不具備發送信號的能力的,只有內核才可以發信號,內核有那么多信號,我們要發哪個信號,并且發給誰呢?那么我們就需要先告訴內核進程PID,信號ID是多少,kill函數就幫我們解決了這個問題,函數原型:

linux進程信號通信實例分析

編譯并運行:

linux進程信號通信實例分析

從kill和raise的函數原型上看,raise沒有pid這個參數,所以raise是可以通過kill來實現的。等價于:

linux進程信號通信實例分析

第一部分信號發送總結:

用戶空間不能發送信號,是通過系統調用函數告訴內核發什么信號,發給誰,讓內核來發送的,只有內核才可以發信號。可以使用kill,raise,alarm函數來讓內核發送信號。

第二部分信號接收

我們可以使用pause來接收信號,pause函數使該進程暫停讓出CPU。我們來看下下面這個例子,當我們在鍵盤上按下ctrl+c的時候,程序收到SIGINT信號會被喚醒,然后執行fun函數,處理完之后再返回繼續運行該程序,不按則只打印process start(進入睡眠狀態)。

linux進程信號通信實例分析

第三部分信號處理

信號的處理有三種方式,分別為:1,忽略,就是收到信號后,什么也不做,不處理。2,按照默認的方式處理。3,捕獲并處理,捕獲到信號后,執行我們自己想執行的代碼。我們先來看下signal函數:

linux進程信號通信實例分析

編譯并運行,因為我們使用的參數為SIG_IGN,所以我們按下ctrl+c的時候并不能中斷程序運行.

linux進程信號通信實例分析

編譯并運行,當我們按下ctrl+c的時候,會中斷我們程序。

linux進程信號通信實例分析

當我們按下ctrl+c的時候,會進去到fun函數。

linux進程信號通信實例分析

 2,用戶空間不能發送信號,信號的產生來自內核,讓內核產生信號的方式有:通過鍵盤輸入ctrl+c等。當程序運行出錯時,內核會給進程發送一個信號,如浮點溢出等,還有就是一個程序可以通過調用函數來給另外一個進程發信號,如kill。

3,進程收到信號后,可以忽略,或者按照默認的方式處理,或者按照自己的處理函數來處理,signale是永久注冊的,每次都有效,如果不想的話這樣可以使用sigaction。

以上就是“linux進程信號通信實例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌什县| 蓬莱市| 桐庐县| 台安县| 郑州市| 西充县| 永城市| 岱山县| 吴堡县| 泸西县| 潢川县| 九龙城区| 海口市| 莱西市| 临洮县| 贡嘎县| 尚义县| 克山县| 舞阳县| 拉孜县| 西城区| 内乡县| 沂水县| 惠州市| 丁青县| 天水市| 嵊州市| 霞浦县| 吉水县| 新巴尔虎左旗| 封开县| 衡东县| 宁阳县| 菏泽市| 柳林县| 永胜县| 安阳市| 正镶白旗| 调兵山市| 常熟市| 乡城县|