日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux怎么确定信号来源,Linux信号来源和捕获处理以及signal函数简介

發布時間:2024/8/1 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux怎么确定信号来源,Linux信号来源和捕获处理以及signal函数简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、信號是什么?信號本質是什么?

日常生活中,綠燈是一個信號,停止標牌是一個信號,裁判手勢也是一個信號。

信號本質(計算機):軟中斷信號(signal,又簡稱為信號)用來通知進程發生了異步事件。在軟件層次上是對中斷機制的一種模擬,在原理上,一個進程收到一個信號與處理器收到一個中斷請求可以說是一樣的。信號是進程間通信機制中唯一的異步通信機制,一個進程不必通過任何操作來等待信號的到達,事實上,進程也不知道信號到底什么時候到達。進程之間可以互相通過系統調用kill發送軟中斷信號。內核也可以因為內部事件而給進程發送信號,通知進程發生了某個事件。信號機制除了基本通知功能外,還可以傳遞附加信息。

2、信號的來源

信號來自內核, 生成信號的請求來自以下3個地方。

(1)用戶

用戶可以通過輸入Ctrl-C, Ctrl-\等命令,或是終端驅動程序分配給信號控制字符的其他任何鍵來請求內核產生信號。

(2)內核

當進程執行出錯時, 內核給進程發送一個信號。 例如,非法段存取,浮點數溢出,亦或是一個非法指令,內核也利用信號通知進程特定事件發生。

(3)進程

一個進程可以通過系統調用kill給另外一個進程發送信號, 一個進程可以和另一個進程通過信號通信。

3、信號類型

4、信號捕獲處理

進程能夠通過系統調用signal告訴內核, 它要如何處理信號, 進程有3個選擇。

(1)接收默認處理(通常是消亡)

SIGINT的默認處理是消亡, 進程并不一定要使用signal接收默認處理,但是進程能夠通過以下調用來恢復默認處理。

signal(SIGINT, SIG_DFL);

(2)忽略信號

程序可以通過以下調用來告訴內核, 它需要忽略SIGINT。

signal(SIGINT, SIG_IGN);

(3)信號處理函數

程序能夠告訴內核,當程序到來時應該調用哪個函數。

signal(signum, functionname);

5、信號處理例子

(1)默認處理信號

#include#includeint main()

{

signal(SIGINT,SIG_DFL);

int i;

for( i = 0; i<10;++i)

{

printf("hello world\n");

sleep(1);

}

return 0;

}

?

(2)忽略信號

#include#includeint main()

{

signal(SIGINT,SIG_IGN);

int i;

for( i = 0; i<10;++i)

{

printf("hello world\n");

sleep(1);

}

return 0;

}

(3)使用信號處理處理函數

#include#includeint main()

{

void f(int);

signal(SIGINT,f);

int i;

for( i = 0; i<10;++i)

{

printf("hello world\n");

sleep(1);

}

return 0;

}

void f(int signum)

{

printf("SIGINT\n");

}

六、另外補充(sigaction函數)

(1)?https://blog.csdn.net/u010889616/article/details/48159537(推薦)

(2)https://blog.csdn.net/wallaceli1981/article/details/4293324

總結

以上是生活随笔為你收集整理的Linux怎么确定信号来源,Linux信号来源和捕获处理以及signal函数简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。