黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 詳解Linux信號

詳解Linux信號

更新時間:2020-12-25 17:36:03 來源:動力節(jié)點 瀏覽1298次

信號(Signals)是Unix、類Unix以及其他POSIX兼容的操作系統(tǒng)中進程間通訊的一種有限制的方式。Linux信號是Linux進程間通信機制中唯一的異步通信機制,用來提醒進程一個事件已經(jīng)發(fā)生。當一個信號發(fā)送給一個進程,操作系統(tǒng)中斷了進程正常的控制流程,此時,任何非原子操作都將被中斷。如果進程定義了信號的處理函數(shù),那么它將被執(zhí)行,否則就執(zhí)行默認的處理函數(shù)。

 

一般情況下,linux信號的來源可分為以下三種:

1.硬件方式:除數(shù)為零、無效的存儲訪問等硬件異常產(chǎn)生信號。這些事件通常由硬件(如:CPU)檢測到,并將其通知給Linux操作系統(tǒng)內(nèi)核,然后內(nèi)核生成相應(yīng)的信號,并把信號發(fā)送給該事件發(fā)生時正在進行的程序。

 

2.軟件方式:用戶在終端下調(diào)用kill命令向進程發(fā)送任務(wù)信號、進程調(diào)用kill或sigqueue函數(shù)發(fā)送信號、當檢測到某種軟件條件已經(jīng)具備時發(fā)出信號,如由alarm或settimer設(shè)置的定時器超時時將生成SIGALRM信號等多種情景均可產(chǎn)生信號。

 

3.鍵盤輸入:當用戶在終端上按下某鍵時,將產(chǎn)生信號。如按下組合鍵Ctrl+C將產(chǎn)生一個SIGINT信號,Ctrl+\產(chǎn)生一個SIGQUIT信號等。

 

我們可運行kill -l查看Linux支持的信號列表:

sl@Li:~/Works$ kill -l

 1) SIGHUP  2) SIGINT  3) SIGQUIT  4) SIGILL  5) SIGTRAP

 6) SIGABRT  7) SIGBUS  8) SIGFPE  9) SIGKILL 10) SIGUSR1

11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM

16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP

21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ

26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR

31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3

38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8

43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13

48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12

53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7

58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2

63) SIGRTMAX-1 64) SIGRTMAX

可以看到Linux中系統(tǒng)一共支持64種信號,其中1到31號信號為普通信號(也程為不可靠信號),34到64為實時信號(可靠信號)。可靠信號與不可靠信號的區(qū)別:

這里的不可靠主要是不支持信號隊列,就是當多個信號發(fā)生在進程中的時候(收到信號的速度超過進程處理的速度的時候),這些沒來的及處理的信號就會被丟掉,僅僅留下一個信號。

可靠信號是多個信號發(fā)送到進程的時候(收到信號的速度超過進程處理信號的速度的時候),這些沒來的及處理的信號就會排入進程的隊列。等進程有機會來處理的時候,依次再處理,信號不丟失。

 

下面列出幾個常用的信號:

SIGHUP:

當用戶退出終端時,由該終端開啟的所有進程都退接收到這個信號,默認動作為終止進程。

 

SIGINT:

程序終止(interrupt)信號, 在用戶鍵入INTR字符(通常是Ctrl+C)時發(fā)出,用于通知前臺進程組終止進程。

 

SIGQUIT:

和SIGINT類似, 但由QUIT字符(通常是Ctrl+\)來控制. 進程在因收到SIGQUIT退出時會產(chǎn)生core文件, 在這個意義上類似于一個程序錯誤信號。

 

SIGKILL:

用來立即結(jié)束程序的運行. 本信號不能被阻塞、處理和忽略。

 

SIGTERM:

程序結(jié)束(terminate)信號, 與SIGKILL不同的是該信號可以被阻塞和處理。通常用來要求程序自己正常退出。

 

SIGSTOP:

停止(stopped)進程的執(zhí)行. 注意它和terminate以及interrupt的區(qū)別:該進程還未結(jié)束, 只是暫停執(zhí)行. 本信號不能被阻塞, 處理或忽略。

 

 

代碼示例:

下面的代碼收到程序退出信號后會執(zhí)行用戶定義的信號處理函數(shù)來替代系統(tǒng)默認的處理程序。

#include<stdlib.h>

#include<stdio.h>

#include<signal.h>

#include<sys/types.h>

#include<unistd.h>

 

void sig_handle(int sig) {

    printf("received signal: %d, quit.\n", sig);

    exit(0);

}

 

int main () {

    signal(SIGINT, sig_handle);

    signal(SIGKILL, sig_handle);

    signal(SIGSEGV, sig_handle);

    signal(SIGTERM, sig_handle);

 

    int i = 0;

    while (1) {

        printf("%d\n", ++i);

        sleep(2);

    }

 

    printf("main quit.");

 

    return 0;

}

運行結(jié)果:

received signal: 15, quit.

 

實際上,Linux信號可以看作是異步通知,通知接收信號的進程有哪些事情發(fā)生了,也可以簡單理解為信號是某種形式上的軟中斷。想要深入了解Linux信號的運行機制,可以參考本站的Linux教程中給出的資料,結(jié)合自己在Linux系統(tǒng)上的實踐操作得出自己的結(jié)論。

 


提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 在线播放国产一区 | 男女性接交无遮挡免费看视频 | 国产日韩视频在线 | 国产欧美精品一区aⅴ影院 国产欧美成人一区二区三区 | 国产欧美日韩综合精品一区二区 | 国产小视频免费 | www永久免费视频 | 人人看人人做人人爱精品 | 亚洲七七久久精品中文国产 | 黑丝在线观看 | 亚洲黄色天堂 | 国产成人精品综合网站 | 五月激情丁香 | 免费人成网站 | 一区二区三区在线 | 日本 | 天天爱夜夜做 | 日本三级三级三级免费看 | 黄色免费一级播放片 | 日本一区二区三区免费在线观看 | 97色在线观看免费视频 | 精品手机在线视频 | 黄色视屏在线看 | 午夜性生活片 | 黄色a三级三级三级免费看 黄色a三级免费看 | 91精品欧美一区二区综合在线 | 韩国在线观看免费观看影院 | 国内精品一区二区在线观看 | 日本在线免费 | 亚洲国产精品热久久2022 | 久久久久国产精品免费免费 | 老扒夜夜春宵粗大好爽aa毛片 | 天堂最新在线资源 | 小明明看看视频永久免费网 | 国产精品久久久久久影视 | 欧美怡红院免费的视频 | 婷婷色综合成人成人网小说 | 1024日本 | 国内欧美一区二区三区 | 精品午夜一区二区三区在线观看 | a级毛片免费完整视频 | 一本视频在线 |