精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

玩透Linux信號機制

系統 Linux
syscall進入內核,把該干的事情干完,就執行sysret返回用戶態。返回到哪里?rcx中內存地址的位置,這個位置就是信號處理函數。執行完信號處理函數,pop出棧底元素,跳過去,這個位置就是CPU執行syscall進入內核后面的哪一行代碼的內存地址,從而實現接著執行。

1.信號處理函數

如果我們想捕捉進程的這兩個信號:SIGCHLD、SIGCONT,用到函數sigaction

圖片圖片

Linux內核提供了多少種信號呢?shell終端運行shell -l即可看到,64種。我們代碼中捕捉的兩個信號,分別是17號、18號信號,這兩個數字記一下,等下查看內核數據能看到

圖片圖片

先在內核中找到我們注冊的信號處理函數,再說底層實現原理。這個你得自己寫內核驅動程序,市面上沒有任何工具可以讓你看

圖片圖片

找到了。再確定一下我們通過函數sigaction注冊的信號處理函數地址是不是這兩個,一毛一樣

圖片圖片

接下來說說Linux內核是如何存儲我們注冊的信號處理函數

struct task_struct {
    struct sighand_struct		*sighand;
    ……
}

struct sighand_struct {
	spinlock_t		siglock;
	refcount_t		count;
	wait_queue_head_t	signalfd_wqh;
	struct k_sigaction	action[_NSIG];
};

struct k_sigaction {
	struct sigaction sa;
#ifdef __ARCH_HAS_KA_RESTORER
	__sigrestore_t ka_restorer;
#endif
};

struct sigaction {
#ifndef __ARCH_HAS_IRIX_SIGACTION
	__sighandler_t	sa_handler;
	unsigned long	sa_flags;
#else
	unsigned int	sa_flags;
	__sighandler_t	sa_handler;
#endif
#ifdef __ARCH_HAS_SA_RESTORER
	__sigrestore_t sa_restorer;
#endif
	sigset_t	sa_mask;	/* mask last for extensibility */
};

Linux內核中,每個進程對應一個task_struct實例,里面有個屬性sighand就是用來存儲你使用函數sigaction注冊的信號處理函數,具體存儲在sighand_struct的action數組中,數組的索引就是信號的編號:1-64,數組的值是k_sigaction實例,真正存放信號處理函數的地方是sigaction.sa_handler

所以如果你想查看Linux內核中,某個進程注冊的所有信號處理函數,代碼這樣寫即可

圖片圖片

至此,我們寫代碼注冊的信號處理函數,在內核中如何存儲的,就徹底搞明白了。那內核是何時、怎么調用這個函數的呢?接著走……

2.kill-18

比如我們通過kill -18向進程18226發送信號,中間發生了什么?我就不貼源碼了,直接單步調試內核,貼調用棧吧

圖片圖片

這里看到的只是內核態的調用棧,用戶態的,kill命令底層調用的就是glibc庫中的kill函數,而kill函數則是通過syscall+kill的內核調用號,進入內核,調用相關函數

圖片圖片

關于用戶態切內核態,CPU提供了四個門、兩個快速調用,以前的實現方式是0x80中斷門,現在都是走syscall快速調用。如果你非科班,或者沒學過操作系統,應該沒聽過這個,或者對這個沒概念。建議非科班出身的小伙伴,一定要把操作系統補一下

那這個信號在內核中是如何存儲的呢?核心邏輯在send_signal中,我就不貼代碼了,直接說它做了什么吧

struct task_struct {
    struct signal_struct		*signal;
    sigset_t			blocked;
    ……
}

struct signal_struct {
    /* shared signal handling: */
	struct sigpending	shared_pending;
    ……
}

struct sigpending {
	struct list_head list;
	sigset_t signal;
};

struct sigqueue {
	struct list_head list;
	int flags;
	kernel_siginfo_t info;
	struct user_struct *user;
};

進入內核的時候,信號會被包裝成kernel_siginfo

圖片圖片

真正與進程關聯起來的步驟是,將kernel_siginfo再包裝成sigqueue,然后將sigqueue實例掛到sigpending中,進程結構體task_struct中有個屬性shared_pending就是鏈表頭,有點抽象,看圖

圖片圖片

順便說一下,Linux內核中的64種信號分成兩個陣營:可靠信號與不可靠信號,可靠信號又叫實時信號,不可靠信號又叫非實時信號

圖片圖片

實時與非實時,表達的不是立刻去做的意思,是指信號不會丟失。這名字起的真讓人容易產生誤解。Linux內核中的很多函數名也是,比如get_signal,它里面做了很多重要的事情,我看代碼的時候以為就是去信息相關信息

嗯,差不多就這些。至此,信號在內核中是如何存儲的就清晰了。那進程何時處理信號,Linux內核是如何設計的呢?

3.信號處理

如果這塊由你來設計,你會怎么做?不知道?好吧……

Linux內核是如何設計的呢?它的設計是在進程由內核態返回用戶態的路徑上實現的。為什么要這么做呢?

因為要兼容運行用戶態注冊的信號處理函數,這個節點是最優選擇。反正都要進入用戶態執行,在這之前,順便把信號處理函數執行了。這里要怎么實現呢?改線程棧結構,你如果學了我講的匯編,你就知道要怎么改了。

同樣,不貼代碼了,直接單步調試Linux內核看吧!

圖片圖片

函數do_signal就是信號處理的核心函數

接下來詳細分析代碼層面實現,如果你不會匯編,你可能就看不懂了

4.執行信號處理函數

什么時候CPU會由用戶態進入內核態呢?發生中斷、異常,還有比較常見的:系統調用。比如write函數

圖片圖片

當CPU執行syscall指令,CPU就進入Linux內核中了,這時候用戶態的棧比如是這樣(我就畫關鍵信息了哦)

圖片圖片

如果有信號需要處理的時候,這時候用戶又設置了信號處理函數,那內核在回用戶態前會把棧改成這樣

圖片圖片

會把rcx設置為信號處理函數的地址,syscall進入內核,配套的返回指令是sysret,會返回到rcx中內存地址的位置執行代碼。所有的函數的最后一條指令都是ret,會pop出棧頂元素,并跳轉到那個內存地址開始執行代碼。

syscall進入內核,把該干的事情干完,就執行sysret返回用戶態。返回到哪里?rcx中內存地址的位置,這個位置就是信號處理函數。執行完信號處理函數,pop出棧底元素,跳過去,這個位置就是CPU執行syscall進入內核后面的哪一行代碼的內存地址,從而實現接著執行。這樣就完成了進入用戶態,順便執行信號處理函數的動作。怎么樣,是不是特別有智慧!

責任編輯:武曉燕 來源: 硬核子牙
相關推薦

2011-07-05 18:40:19

QT 信號 機制

2011-07-05 18:32:52

QT 信號 機制

2025-02-03 07:00:00

2021-12-10 00:01:53

Vsync信號機制

2022-11-03 07:35:47

OS內核異步

2017-01-16 14:48:42

Linux信號機制分析

2017-01-16 15:05:17

Linux信號機制分析

2017-09-14 09:40:32

PythonUbuntu信號機制

2025-06-25 06:18:46

Linux多線程機制

2011-06-09 09:45:35

Linux QT 信號

2022-10-08 08:34:34

JVM加載機制代碼

2024-07-25 11:53:53

2010-09-09 14:15:08

無線網絡信號

2011-06-23 14:40:13

Qt 信號

2025-07-14 00:40:00

Node.js代碼信號

2010-12-27 10:13:05

PROC文件系統

2009-11-23 19:47:57

ibmdwLinux

2024-05-08 13:41:31

OpenAIA/B測試

2011-06-13 10:21:25

QT 信號 槽機制

2020-10-18 07:13:44

Linux系統編程信號捕捉
點贊
收藏

51CTO技術棧公眾號

av电影成人| 日韩在线观看网址| 情侣黄网站免费看| www.亚洲.com| 国产馆精品极品| 91干在线观看| 91n在线视频| 国产一区在线电影| 精品视频在线免费| 久久综合久久网| 成人动漫在线免费观看| 国产大陆a不卡| 日本精品免费一区二区三区| 欧美一区免费观看| 久草精品在线| 日韩一区二区三区观看| 日韩av播放器| 91白丝在线| 国产精品麻豆欧美日韩ww| 国产欧美一区二区视频| 又骚又黄的视频| 欧美6一10sex性hd| 91麻豆精品在线观看| 成人做爽爽免费视频| 久草国产精品视频| 一区二区三区网站| 亚洲人在线视频| 无码任你躁久久久久久老妇| 久久91视频| 欧美日韩免费一区| 91精品国产毛片武则天| 91成人高清| 久久久久免费观看| 国产亚洲精品美女久久久m| 一起草av在线| 日韩电影在线一区二区三区| 91av在线国产| 国产盗摄x88av| 91亚洲人成网污www| 精品香蕉一区二区三区| 天天躁日日躁狠狠躁av| 亚洲伊人伊成久久人综合网| 色伊人久久综合中文字幕| 欧美国产日韩激情| 婷婷色在线资源| 亚洲欧美日韩综合aⅴ视频| 亚洲国产午夜伦理片大全在线观看网站| 日韩一区二区三区在线观看视频 | 欧美视频在线观看视频| 怡红院av在线| 亚洲精品综合在线| 三级网在线观看| 麻豆传媒在线完整视频| 成人免费在线视频| 在线不卡视频一区二区| 欧美日本高清| 亚洲欧洲精品一区二区三区 | 亚洲国产欧美视频| av一级久久| 欧美一区二区三区四区视频| 三日本三级少妇三级99| **国产精品| 91精品国产综合久久精品app| www.色.com| 91麻豆精品国产91久久久久推荐资源| 日韩免费性生活视频播放| 俄罗斯女人裸体性做爰| 成人爽a毛片| 日韩国产激情在线| 国产精品国产三级国产专业不 | 久久久午夜精品| 日韩高清三级| 日本美女高清在线观看免费| 国产精品电影一区二区| 在线视频一二三区| 成人性生交大片免费看网站| 懂色av影视一区二区三区| 国产xxxxx在线观看| 外国电影一区二区| 日韩一区二区三区免费观看| 日韩av无码一区二区三区不卡| 欧美日韩另类图片| 中文字幕久久精品| 日日骚一区二区三区| 99精品国产一区二区青青牛奶| 日本一区二区三区四区视频| 在线观看毛片视频| 国产盗摄女厕一区二区三区| 免费成人看片网址| 米奇777四色精品人人爽| 一区二区不卡在线播放| 韩国日本在线视频| 国产精品一站二站| 亚洲精品v天堂中文字幕| 色欲AV无码精品一区二区久久| 1024精品久久久久久久久| 色综合91久久精品中文字幕| 五月婷婷六月婷婷| 国产精品亚洲一区二区三区在线| 精品日本一区二区三区| 日本视频在线免费观看| 午夜日韩在线电影| 五月激情婷婷在线| 中文精品一区二区| 色综合五月天导航| 中文有码在线播放| 不卡的av在线| 一本色道久久综合亚洲二区三区 | 国产精品91久久久久久| 国产成人av免费看| 国产香蕉久久精品综合网| 日本黄网站色大片免费观看| av有声小说一区二区三区| 日韩三级在线观看| 亚洲一级片在线播放| 黄色一区二区三区四区| 国产精品自产拍在线观看中文| 午夜视频免费在线| 一区二区三区在线播| 99热这里只有精品在线播放| 日韩成人av在线资源| 久久不射热爱视频精品| 中文字幕 视频一区| av一二三不卡影片| 国产精品视频一二三四区| 青青青国产精品| 亚洲图片在线综合| 成人午夜淫片100集| 成人性生交大片免费看中文| 中文字幕欧美日韩一区二区三区| 性欧美videohd高精| 亚洲电影免费观看高清| 亚洲国产精品久| 国内精品在线播放| 一区二区三区国产福利| 日韩大尺度黄色| 亚洲乱码国产乱码精品精天堂| 九九视频免费看| 国产老女人精品毛片久久| 一区二区不卡视频| av免费在线一区| 亚洲四色影视在线观看| 精品国产午夜福利| 91亚洲精品久久久蜜桃| 六月婷婷在线视频| 国产乱人伦精品一区| 久久久久久久久网站| 亚洲高清视频在线播放| 一区二区三区91| 日韩av成人网| 亚洲夜间福利| 国产精品免费在线播放| 国产91足控脚交在线观看| 精品少妇一区二区三区在线视频| 国产a免费视频| 粉嫩13p一区二区三区| 韩国无码av片在线观看网站| jizz久久精品永久免费| 91精品国产91久久久久久不卡| 午夜精品一区二区三| 尤物视频一区二区| 国产大学生视频| 9色精品在线| 欧美在线播放一区| 日韩一级二级| 久久夜色精品亚洲噜噜国产mv| 国产精品亚洲lv粉色| 亚洲精品国产一区二区三区四区在线| 成人一区二区三区仙踪林| 国自产拍偷拍福利精品免费一| 国产一区自拍视频| 日本不卡一二三| 按摩亚洲人久久| 精品国自产在线观看| 婷婷综合另类小说色区| 国产精品伦子伦| 蜜臀精品久久久久久蜜臀| 亚洲第一综合网站| 久久国产精品色av免费看| 欧美专区在线观看| 日本在线观看www| 日韩欧美高清一区| 国产91国语对白在线| 中文字幕乱码亚洲精品一区| 国产成人精品综合久久久久99| 最新日韩av| 亚洲精品成人久久久998| 国产精品视频一区视频二区| 亚洲91精品在线| 成全电影播放在线观看国语| 日韩一区二区三| 亚洲va在线观看| 亚洲免费高清视频在线| 亚洲av片不卡无码久久| 精品制服美女久久| 欧美日韩在线一| 99国产精品免费视频观看| 国精产品一区二区| 91麻豆精品国产91久久久更新资源速度超快 | 69亚洲乱人伦| 日本不卡在线视频| 色欲色香天天天综合网www| 欧美在线免费看视频| 俄罗斯精品一区二区| 电影一区电影二区| 91国产美女视频| 在线h片观看| 伊人久久大香线蕉av一区二区| 亚洲第一色视频| 欧美乱熟臀69xxxxxx| 91精品国产乱码在线观看| 国产精品国产三级国产三级人妇| 色噜噜在线观看| 国产成a人无v码亚洲福利| 天天爽夜夜爽一区二区三区| 亚洲人体偷拍| 日韩不卡视频一区二区| 欧美日韩国产一区二区三区不卡 | 四虎影视在线观看2413| 91精品啪在线观看国产60岁| 91视频在线视频| 欧美日韩另类在线| 久久精品国产亚洲av麻豆色欲| 国产精品网站在线观看| 欧美日韩高清丝袜| 99久久精品情趣| 日本不卡视频一区| 丁香激情综合五月| 国产精品99久久久精品无码| 狠狠色狠狠色综合日日91app| 久久久久久三级| 久久国产99| 黄色免费视频大全| 亚洲国产三级| 九九爱精品视频| 99精品免费视频| 亚洲熟妇无码一区二区三区| 狠狠综合久久| 日韩欧美一级在线| 影音先锋日韩在线| 91大学生片黄在线观看| 中文在线播放一区二区| 天天做天天爱天天高潮| 欧美激情91| 久久精品在线免费视频| 欧美日韩精选| 99re99热| 欧美日本一区二区视频在线观看| 91嫩草国产丨精品入口麻豆| 一区二区三区四区在线观看国产日韩| 法国空姐在线观看免费| 欧美精品91| 97在线国产视频| 99pao成人国产永久免费视频| 免费在线观看视频a| 中文高清一区| aa免费在线观看| 日韩电影免费在线| 手机版av在线| 国产成人亚洲精品狼色在线| 日本50路肥熟bbw| www.欧美日韩国产在线| 国产美女精品久久| 亚洲国产精品黑人久久久| 91资源在线播放| 亚洲视频综合在线| 久草视频免费在线| 日韩欧美福利视频| 亚洲熟妇av乱码在线观看| 91精品国产色综合久久不卡电影| 亚洲精品97久久中文字幕无码| 亚洲第一网站免费视频| 免费国产在线视频| 日韩性生活视频| 大香伊人中文字幕精品| 欧美一区二区三区精品电影| 色天使综合视频| 91在线精品观看| 亚洲高清极品| 中文字幕一区二区三区四区五区六区 | 北条麻妃在线观看| 久久精品国产一区二区三| 91亚洲一线产区二线产区| 久久先锋影音av| 卡通动漫亚洲综合| 岛国av一区二区三区| 在线免费看av的网站| 精品国产乱码久久久久久久久| 深夜影院在线观看| 色老头一区二区三区在线观看| 182tv在线播放| 国产99久久久欧美黑人| 成年永久一区二区三区免费视频| 国内一区二区三区在线视频| 不卡av一区二区| 97视频久久久| 精品一区二区三区久久| 制服丝袜第二页| 亚洲激情五月婷婷| 天堂网一区二区| 亚洲国产一区自拍| 蜜桃av在线免费观看| 青青草一区二区| av日韩精品| 中文网丁香综合网| 久久精品在线| 欧美图片自拍偷拍| 一区视频在线播放| 中文字幕手机在线视频| 亚洲成色777777女色窝| 激情影院在线观看| 国产精品久久久久久久9999| 精品三级在线观看视频| 亚洲高潮无码久久| 另类综合日韩欧美亚洲| 中文字幕在线1| 精品久久久久久久久国产字幕| 精品免费久久久| 中文字幕亚洲自拍| 欧美大片免费| 国产乱码精品一区二区三区卡 | 国产日产欧产精品推荐色| 日本三级2019| 日韩欧美色电影| 美女国产在线| 国产男女猛烈无遮挡91| 国产毛片一区二区三区| 久久久999视频| 不卡av在线免费观看| 国产成人精品av久久| 欧美一区二区视频免费观看| 欧美天天影院| 国产自摸综合网| 成人影视亚洲图片在线| 国产精品99久久免费黑人人妻| bt7086福利一区国产| 国产精品16p| 亚洲国产精品久久久久| 福利成人导航| 精品福利影视| 99在线观看免费视频精品观看| 国产乱了高清露脸对白| 午夜一区二区三区在线观看| 亚洲欧美强伦一区二区| 欧美激情久久久久| 国产劲爆久久| 久久久久免费看黄a片app| 99久久国产免费看| 中文字幕视频网| 国产小视频国产精品| 91亚洲精品| 亚洲一区综合| 国产剧情在线观看一区二区 | 一本大道久久a久久综合婷婷| 欧美少妇另类| 国产精品扒开腿爽爽爽视频| 俺要去色综合狠狠| 91pony九色| 亚洲自拍偷拍网站| 五月天婷婷视频| 国产精品99久久久久久久久| 日韩aaaa| 色网站在线视频| 亚洲国产aⅴ天堂久久| 视频在线不卡| 国产女人精品视频| 一区二区三区在线| 国产福利在线观看视频| 色屁屁一区二区| 久久黄色美女电影| 国产精品久久九九| 久久一区亚洲| 人人澡人人澡人人看| 欧美va亚洲va香蕉在线| xx欧美视频| 精品日韩在线播放| 99久久99久久精品国产片果冻 | 亚洲精品久久久久久一区二区| 国内精品久久久久影院色| 久久精品欧美一区二区| 亚洲人成网站999久久久综合| 日韩av黄色| 女人天堂av手机在线| 国产精品久久久久aaaa| 国产自产一区二区| 国产成人精品一区二区在线| 欧美不卡一区| 九色porny自拍视频| 欧美一区二区在线播放| 日本在线啊啊| 色中文字幕在线观看| 91老师国产黑色丝袜在线| 国产精品热久久| 日本不卡免费高清视频| 欧美激情aⅴ一区二区三区| av中文字幕免费观看| 日韩欧美一区二区在线视频| 久久久成人av毛片免费观看| 国产乱子伦精品无码专区| 欧美国产激情二区三区|