亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > Unix > 正文

《Unix環(huán)境高級編程》讀書筆記 第10章-信號

2024-06-28 13:24:24
字體:
供稿:網(wǎng)友
《Unix環(huán)境高級編程》讀書筆記 第10章-信號1.引言
  • 信號是軟件中斷
  • 信號提供了一種處理異步事件的方法。
2. 信號概念
  • 信號的名字都是以3個字符SIG開頭。
  • linux3.2.0支持31種信號。FreeBSD、Linux和Solaris作為實時擴展都支持另外的應(yīng)用程序定義的信號。
  • 在頭文件signal.h(其中include的bits/signum.h)中,信號名都被定義為正整數(shù)常量,不存在編號為0的信號。kill函數(shù)對信號編號0有特殊的應(yīng)用。

  • 很多條件可以產(chǎn)生信號:

    1. 用戶按下某些終端鍵時:Ctrl+C、Ctrl+/、Ctrl+Z
    2. 硬件異常產(chǎn)生信號:除數(shù)為0、無效的內(nèi)存引用
    3. 進程調(diào)用kill函數(shù)可將任意信號發(fā)送給另一個進程或進程組
    4. 當檢測到某些軟件條件已經(jīng)發(fā)生,并應(yīng)將其通知有關(guān)進程時產(chǎn)生信號。如:SIGURG(網(wǎng)絡(luò)連接上傳來帶外數(shù)據(jù))、SIGPipE(在管道的讀進程已經(jīng)終止后,一個進程寫此管道)、SIGALRM(進程所設(shè)置的定時器超時)
  • 信號是異步事件的經(jīng)典實例。產(chǎn)生信號的事件對進程而言是隨機出現(xiàn)的。進程不能簡單地測試一個變量(如errno)來判斷是否發(fā)生了一個信號,而是必須告訴內(nèi)核“在此信號發(fā)生時,請執(zhí)行下列操作”。

  • 當某個信號出現(xiàn)時,可以告訴內(nèi)核按下列3種方式之一進行處理,稱之為信號的處理

    1. 忽略此信號。SIG_IGN。只有兩種信號不能被忽略:SIGKILL和SIGSTOP。原因是:它們向內(nèi)核和超級用戶提供了使進程終止或停止的可靠方法。另外,如果忽略某些由硬件異常產(chǎn)生的信號(如非法內(nèi)存引用或除以0),則進程的運行行為是未定義的。
    2. 捕捉信號。即通知內(nèi)核在某種信號發(fā)生后,調(diào)用一個用戶函數(shù)。
    3. 執(zhí)行系統(tǒng)默認動作。對大多數(shù)信號的默認動作是終止該進程。
  • 終止+core。大多數(shù)Unix系統(tǒng)調(diào)試程序都使用core文件檢查進程終止時的狀態(tài)。

  • 在下列條件下不產(chǎn)生core文件:

    1. 進程是設(shè)置用戶ID的,而且當前用戶并非程序文件的所有者
    2. 進程是設(shè)置組ID的,而且當前用戶并非程序文件的組所有者
    3. 用戶沒有寫當前工作目錄的權(quán)限
    4. 文件已存在,而且用戶對該文件沒有寫權(quán)限
  • 4個平臺對各種signal的支持及默認處理方式

  • 主要信號簡要說明:
    • SIGABRT。調(diào)用abort函數(shù)時產(chǎn)生此信號。
    • SIGALRM。當用alarm函數(shù)設(shè)置的定時器超時時,產(chǎn)生此信號。
    • SIGCHLD。在一個進程終止或停止時,該信號被送給其父進程。按系統(tǒng)默認,將忽略此信號。
    • SIGFPE。表示算術(shù)運算異常,如除以0、浮點溢出等。
    • SIGHUP。如果終端接口檢測到一個連接斷開,則將此信號送給與該終端相關(guān)的控制進程(會話首進程)。通常使用此信號通知守護進程再次讀取它們的配置文件。選用此信號的理由是:守護進程不會有控制終端,通常決不會接收到這種信號。
    • SIGILL。表示進程執(zhí)行一條非法硬件指令。
    • SIGINT。當用戶按下中斷鍵Ctrl+C時,終端驅(qū)動程序產(chǎn)生此信號并發(fā)送至前臺進程組的每一個進程。
    • SIGIO。指示一個異步I/O事件。
    • SIGTERM。由kill命令發(fā)送的系統(tǒng)默認終止信號。
    • SIGKILL。不能捕獲或忽略。它向管理員提供了一紅殺死任一進程的可靠方法。
    • SIGPIPE。如果在管道的讀進程已終止時寫管道,則產(chǎn)生此信號。
    • SIGQUIT。當用戶在終端上按下退出鍵Ctrl+/時,終端驅(qū)動程序產(chǎn)生此信號并發(fā)送給前臺進程組中的所有進程。此信號除了終止前臺進程組(和SIGINT一樣),同時產(chǎn)生一個core文件。
    • SIGSEGV。指示進程進行了一次無效的內(nèi)存引用。
    • SIGTSTP。交互停止信號。當用戶在終端上按下掛起鍵Ctrl+Z時,終端驅(qū)動程序產(chǎn)生此信號,并發(fā)送至前臺進程組的所有進程。
    • SIGSTOP。類似于交互停止信號(SIGTSTP),但它不能被捕獲或忽略。
    • SIGCONT。此作業(yè)控制信號發(fā)送給需要繼續(xù)運行,但當前處于停止狀態(tài)的進程。
    • SIGTTIN。當一個后臺進程組進程試圖讀其控制終端時,終端驅(qū)動程序產(chǎn)生此信號。下列情況例外:1. 讀進程忽略或阻塞此信號;2. 讀進程所屬的進程組是孤兒進程組,此時讀操作返回出錯,errno設(shè)置為EIO
    • SIGTTOU。當一個后臺進程組進程試圖寫其控制終端時,終端驅(qū)動程序產(chǎn)生此信號。
    • SIGURG。通知進程已經(jīng)發(fā)生一個緊急情況。如帶外數(shù)據(jù)到達。
    • SIGUSR1、SIGUSR2。用戶定義的信號,可用于應(yīng)用程序。
3. 函數(shù)signal
  1. #include <signal.h>
  2. void (*signal(int signo, void (*func)(int)))(int);
  3. Returns: PRevious disposition of signal (see following) if OK, SIG_ERR on error
  • signal函數(shù)由ISO C定義。不涉及多進程、進程組以及終端I/O等,所以它對信號的定義非常含糊,以致于對Unix系統(tǒng)而言幾乎毫無用處。
  • 因為signal的語義與實現(xiàn)有關(guān),所以最好使用sigaction函數(shù)代替signal函數(shù)。
  • 本書中的所有實例均使用圖10-18中給出的signal函數(shù),該函數(shù)使用sigaction函數(shù)是一個平臺無關(guān)、語義一致的實現(xiàn)。
  • signo參數(shù)是上面的信號名。func參數(shù)可以是常量SIG_IGN、SIG_DFL或接收到該信號后要調(diào)用的函數(shù)的地址,即信號處理程序的地址。signal函數(shù)的返回值是指向在此之前的信號處理程序的指針。
  1. typedef void Sigfunc(int);
  2. Sigfunc* signal(int, Sigfunc*);
  3. #define SIG_ERR (void (*)())-1
  4. #define SIG_DFL (void (*)())0
  5. #define SIG_IGN (void (*)())1
  • exec,程序啟動

    當exec執(zhí)行一個程序時,所有信號都被設(shè)置為它們的默認動作,除非調(diào)用exec的進程忽略該信號(則繼續(xù)保持忽略)。也就是說,exec函數(shù)將原先設(shè)置為要捕獲的信號都更改為默認動作,其他保持不變。因為當exec一個新程序時,信號處理程序的地址很可能在新程序中已無意義。

  • fork,進程創(chuàng)建

    當一個進程調(diào)用fork時,其子進程繼承父進程的信號處理方式。因為信號處理程序的地址在子進程中是有意義的。

4. 不可靠的信號
  • 早期的Unix版本中,信號是不可靠的。不可靠指的是,信號可能會丟失:一個信號發(fā)生了,當進程卻可能一直不知道。同時,進程對信號的控制能力很差,它能捕獲或忽略它,但不能阻塞。
  • 早期版本的另一個問題是:在進程每次接到信號對其進行處理時,隨即將該信號動作重置為默認值。故需要再次建立對該信號的捕獲,但在此期間有一個時間窗口。
  • 早期版本的另一個問題是:在進程不希望某種信號發(fā)生時,它不能關(guān)閉該信號,只能忽略它。
5. 中斷的系統(tǒng)調(diào)用
  • 早期Unix系統(tǒng)的一個特性是:如果進程在執(zhí)行一個低速系統(tǒng)調(diào)用而阻塞期間捕捉到一個信號,則該系統(tǒng)調(diào)用就被中斷不再繼續(xù)運行。該系統(tǒng)調(diào)用返回出錯,其errno設(shè)置為EINTR。
  • 為了支持這種特性,將系統(tǒng)調(diào)用分為兩類:低速系統(tǒng)調(diào)用和其他系統(tǒng)調(diào)用。
  • 低速系統(tǒng)調(diào)用是可能會使進程永遠阻塞的一類系統(tǒng)調(diào)用。
  • 與被中斷的系統(tǒng)調(diào)用相關(guān)的問題是必須顯式地處理出錯返回。典型的代碼序列如下:
  1. again:
  2. if ((n = read(fd, buf, BUFFSIZE)) < 0) {
  3. if (errno == EINTR)
  4. goto again; /* just an interrupted system call */
  5. /* handle other errors */
  6. }
  • 4.2 BSD引進了某些被中斷系統(tǒng)調(diào)用的自動重啟動,包括ioctl、read、readv、write、writev、wait、waitpid。但是這種自動重啟動的處理方式也會帶來問題,某些應(yīng)用程序并不希望這些函數(shù)被中斷后重啟動。為此,4.3 BSD運行進程基于每個信號禁用此功能。
  • POSIX.1要求只有中斷信號的SA_RESTART標志有效時,實現(xiàn)才重啟動系統(tǒng)調(diào)用。
  • 歷史上,使用signal函數(shù)建立信號處理程序時,對于如何處理被中斷的系統(tǒng)調(diào)用,各種實現(xiàn)的做法各不相同。
6. 可重入函數(shù)
  • 進程捕捉到信號并對其進行處理時,進程正在執(zhí)行的正常指令序列就被信號處理程序臨時中斷,它首先執(zhí)行該信號處理程序中的指令。但是,在信號處理程序中,不能判斷捕捉到信號時進程執(zhí)行到何處:
    1. 如果進程正在執(zhí)行malloc,而在信號處理程序中又再次調(diào)用malloc,這時會?
    2. 如果進程正在執(zhí)行g(shù)etpwnam,這是將其結(jié)果存放在靜態(tài)存儲單元中的函數(shù),而在信號處理程序中又再次調(diào)用getpwnam,這時會?
  • SUS說明了在信號處理程序中保證調(diào)用安全的函數(shù)。這些函數(shù)是可重入的,并被稱為異步信號安全的。
  • 沒有列入上圖的大多數(shù)函數(shù)是不可重入的,因為:
    1. 它們使用靜態(tài)數(shù)據(jù)結(jié)構(gòu)
    2. 它們調(diào)用malloc或free
    3. 它們是標準的I/O函數(shù)。標準I/O庫的很多實現(xiàn)都以不可重入方式使用全局數(shù)據(jù)結(jié)構(gòu)。
  • 應(yīng)當了解,即使信號處理程序調(diào)用的是上圖中的函數(shù),但是由于每個線程只有一個errno變量,所以信號處理程序可能會修改其原先值。故作為一個通用的規(guī)則,先保存,后恢復。
7. SIGCLD語義8. 可靠信號術(shù)語和語義
  • 首先,當造成信號的事件發(fā)生時,向進程發(fā)送一個信號。
  • 當對信號采取了某種動作時,我們說向進程遞送了一個信號。在信號產(chǎn)生和遞送之間的時間間隔內(nèi),稱信號是未決的。
  • 進程可以選用“阻塞信號遞送”。內(nèi)核在遞送一個原來被阻塞的信號給進程時(而不是在產(chǎn)生該信號時),才決定對它的處理方式。因此,進程在信號遞送給它之前仍可改變對該信號的動作。
  • 每個進程都有一個信號屏蔽字,它規(guī)定了當前要阻塞遞送到該進程的信號集。進程可以調(diào)用sigprocmask函數(shù)來檢測和更改其當前信號屏蔽字。
  • 進程調(diào)用sigpending函數(shù)來判定哪些信號是設(shè)置為阻塞并處于未決狀態(tài)的。
  • 如果在進程解除對某個信號的阻塞之前,該信號發(fā)生了多次,那么?如果遞送該信號多次,則稱這些信號進行了排隊。除非支持POSIX.1實時擴展,否則大多數(shù)Unix并不對信號排隊,而只遞送一次。
9. 函數(shù)kill和raise
  • kill函數(shù)將信號發(fā)送給進程或進程組
  • raise函數(shù)則允許進程向自身發(fā)送信號。
  1. #include <signal.h>
  2. int kill(pid_t pid, int signo);
  3. int raise(int signo);
  4. Both return: 0 if OK, −1 on error
  • raise(signo); 等價于 kill(getpid(), signo);
  • kill的pid參數(shù)有以下4種情況:
    • pid > 0,發(fā)送給進程ID為pid的進程
    • pid == 0,發(fā)送給與發(fā)送進程屬于同一進程組的所有進程
    • pid < 0,發(fā)送給其進程組ID等于pid絕對值,而且發(fā)送進程具有權(quán)限向其發(fā)送信號的所有進程
    • pid == -1,發(fā)送給發(fā)送進程具有權(quán)限向它們發(fā)送信號的所有進程
  • 關(guān)于發(fā)送信號的權(quán)限

    1. 超級用戶可將信號發(fā)送給任一進程。
    2. 非超級用戶,其基本規(guī)則是發(fā)
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
色婷婷视频在线| 日韩欧美一区三区| 亚洲精品7777xxxx青睐| 亚洲国产伊人| 国产一区二区三区日韩| 国产精品视频3p| sese在线视频| 最近中文字幕mv第三季歌词| 国内在线免费高清视频| 亚洲国产高清高潮精品美女| 国产在线观看不卡一区二区三区| 在线免费av电影| 亚洲第一在线视频| 日韩精品一页| 九九热这里只有精品免费看| 久久丫精品忘忧草西安产品| 青娱乐精品视频在线| 国产精品久久久av久久久| 九九热在线观看视频| 最近免费中文字幕大全免费版视频| 成人羞羞网站入口| 欧美三级美国一级| 久久综合色综合| 欧美人成在线| 91日韩一区二区三区| 欧美日韩国产小视频| 国产精品videossex撒尿| 成人h视频在线| 国产精品久久午夜夜伦鲁鲁| 国产欧美va欧美不卡在线| 精品日韩一区| 日韩欧美在线国产| 91一区二区三区在线| 日韩免费毛片| 激情小说亚洲一区| 96pao国产成视频永久免费| 欧美性活一级视频| a√免费观看在线网址www| 日韩精品在线视频美女| 91精品久久久久久久久99蜜臂| 91在线免费看| 欧美一级片免费| 国产日韩欧美在线观看视频| 亚洲美女毛片| 翡翠波斯猫1977年美国| 国产精品一区二区久久| 久久久成人av| 国产免费av国片精品草莓男男| 成人动漫在线观看视频| 久久久久久久久久久久久久久国产| 91中文字幕在线视频| 男人女人拔萝卜视频| 成人午夜激情在线| 黄漫在线观看| 中文在线综合| 97国产超碰| 中文在线第一页| 久草亚洲一区| 番号在线播放| 3d动漫啪啪精品一区二区免费| 欧美日韩在线一区| 成年大片免费视频播放二级| 91精品一区二区三区蜜桃| 免费看成人av| 国产精品成人观看视频国产奇米| 四虎884aa成人精品最新| 亚洲第一成人在线| 91麻豆国产香蕉久久精品| 91高潮大合集爽到抽搐| 欧美日韩高清区| 成人精品一二三区| 51国偷自产一区二区三区的来源| 一级片视频播放| 婷婷婷国产在线视频| 亚洲国产精品第一页| 神马午夜精品91| 欧美性开放视频| 日韩精品一区二区三区色欲av| 电影k8一区二区三区久久| 欧美巨胸大乳hitomi| 精品人妻一区二区三区香蕉| 国产大学生校花援交在线播放| 久久久电影免费观看完整版| 国产aⅴ2021| 99re热视频在线| 欧美性猛交xxxx乱大交丰满| 国产又色又爽又黄又免费| 欧美日韩国产免费一区二区| 捆绑裸体绳奴bdsm亚洲| 俺去啦俺在线观看| 婷婷综合影院| 久久久亚洲影院你懂的| 91在线免费观看网站| 欧洲亚洲一区二区三区四区五区| 日韩av电影免费| 亚洲女在线观看| 一个人看的免费网站www视频| 国产日产精品一区二区三区四区| 8888在线观看免费www| 538国产精品一区二区免费视频| 黄页视频在线播放| 91美女视频网站| 青青草国产成人a∨下载安卓| 亚洲激情在线视频| 中文字幕影片免费在线观看| 欧美一级片免费播放| 亚洲国产精品免费| 不卡一二三区| 人体私拍套图hdxxxx| 久久久久久久国产精品毛片| 国产偷久久久精品专区| 精品国产中文字幕| 国产一区二区自拍视频| 99精品免费在线观看| 五月婷婷久久综合| 91网页在线观看| 亚洲欧洲av一区二区三区久久| 久久国产午夜精品理论片最新版本| 国产一区二区不卡老阿姨| 露脸国产精品自产在线播| 久久社区一区| 毛片免费在线播放| 国产精品十八以下禁看| 未满十八勿进黄网站一区不卡| 五月丁香综合缴情六月小说| 欧美成人r级一区二区三区| 99t1这里只有精品| 欧美日韩国产一中文字不卡| 成人亚洲精品久久久久软件| 精品视频一二三| 欧美日韩国产在线播放| 国产精品久久三区| 七七久久电影网| 欧美人与禽zozo性伦| zzjj国产精品一区二区| 国产色一区二区三区| 日韩有码中文字幕在线| 丝袜理论片在线观看| 69av影院| 国产白浆在线免费观看| 日韩欧美一区二区一幕| 在线播放黄色网址| 91.www| 五月天欧美精品| 午夜免费一区二区| 国产真实生活伦对白| 波多野结衣在线观看一区| 精品一区二区91| 欧美日韩va| 国产精品扒开做爽爽爽的视频| 91精品福利在线一区二区三区| 国产一区二区三区四区| 波多野结衣中文一区| 国产精品videosex性欧美| 91精品国产免费| 国产精品―色哟哟| aaa一级黄色片| 在线观看视频中文字幕| 久久免费少妇高潮99精品| 50度灰在线| 一级片免费观看视频| 精品国产一区二区国模嫣然| 亚洲线精品久久一区二区三区| 性一交一乱一色一视频麻豆| 欧美日韩国产欧美日美国产精品| 午夜欧美一区二区三区免费观看| 亚洲成人av在线电影| 亚洲欧洲日韩精品在线| 成人国产在线视频| 99这里有精品| 亚洲图片在线播放| h网站久久久| 蜜桃视频在线观看免费视频网站www| 免费日本黄色网址| 亚洲综合精品久久| 操她视频网站| 91国内精品久久| 在线观看 中文字幕| 欧美啪啪精品| 久久精品一二三四| 我的公把我弄高潮了视频| 99精品欧美一区二区三区| 久久精品亚洲精品国产欧美| 久久久久久久久久久免费视频| 精品国产乱码久久| 久久99国产精品视频| 国产精品久久午夜夜伦鲁鲁| 日本在线观看网站| 国产精品对白交换视频| jizz在线观看中文| 成人夜晚看av| 三上悠亚国产精品一区二区三区| 国产美女91呻吟求| 欧美啪啪一区| 国产精品成人无码专区| 国产超碰精品在线观看| 欧美自拍视频在线观看| 在线观看免费视频a| 影音欧美亚洲| 久久久精品久久久久久96| 97人妻人人澡人人爽人人精品| 亚洲二区视频在线| 欧美日本高清视频在线观看| 国产精品无码2021在线观看| 秋霞影院一区二区三区| 欧美v亚洲v综合v国产v仙踪林| 奇米影音第四色| 日韩成人在线电影| 欧美欧美欧美欧美首页| 久久免费视频网| 日韩av不卡电影| 大胆人体色综合| 97精品一区二区三区| 免费在线观看a视频| 日韩在线观看第一页| av在线免费网站| 日韩一区二区三区在线观看视频| 欧美福利视频导航| 18禁网站免费无遮挡无码中文| 欧美日本一区二区在线观看| 一区二区三区日本久久久| 日韩欧美中文字幕在线播放| 中文字幕一区二区三区5566| 牛牛精品视频在线| 91麻豆视频网站| 国产精品xxx在线观看www| 特级西西444www大精品视频| 欧美18—19sex性hd| 亚洲天堂av在线| 中文字幕2020第一页| 日韩精品中文字幕在线观看| 国产成人久久精品77777最新版本| 国产伦精品一区二区三区高清版| 手机在线一区二区三区| 欧美久久一区二区三区| 精品偷拍一区二区三区在线看| 欧美**vk| 国内精品卡一卡二卡三| 国产99在线 | 亚洲| 国产精品综合久久久久久| 日韩欧美国产黄色| 亚洲深夜福利视频| 久久99久久99精品免观看软件| 少妇性色午夜淫片aaa播放| 波多野结衣喷潮| 日本欧美精品久久久| 久久精品国内一区二区三区| 国内精品久久久久国产盗摄免费观看完整版| 中文字幕一区二区在线播放| 在线日韩欧美| 日韩和的一区二在线| 国产一区二区三区精品在线观看| 欧美图片欧美激情欧美精品| 国产精品一码二码三码在线| 中文字幕无码精品亚洲资源网久久| 成人免费毛片日本片视频| 欧美日夜夜逼| 久久激情免费视频| 国产精品成人一区二区三区夜夜夜| 国语精品视频| 久久人人爽人人爽人人av| 欧美在线性视频| 日韩aaa久久蜜桃av| 欧美极品jizzhd欧美18| 国产午夜视频在线播放| 无码精品一区二区三区在线播放| 精品日本一区二区三区在线观看| 欧美日韩伦理在线免费| 欧洲成人av| 黄色成人av在线| 最全影音av资源中文字幕在线| 精品免费视频一卡2卡三卡4卡不卡| 国产一区在线观看麻豆| 五月婷婷免费视频| 日韩精品一级二级| 免费a级毛片在线播放| 午夜精品电影在线观看| 国产精品传媒毛片三区| 精品熟女一区二区三区| 亚洲一区二区中文在线| 国产大片中文字幕在线观看| 亚洲第一主播视频| 日本在线观看不卡视频| 亚洲国产精品精华液ab| 中文字幕久久久| 色呦呦免费观看| 日本精品视频一区| 黄色在线免费播放| 成人久久一区二区三区| 蜜臀精品一区二区| 懂色中文一区二区三区在线视频| 在线播放黄色av| 午夜国产不卡在线观看视频| 北岛玲日韩精品一区二区三区| 欧美日韩另类丝袜其他| 中文字幕导航| 国产精品嫩草69影院| 久久精品日韩一区二区三区| v8888av| 中文字幕日韩在线播放| 区日韩二区欧美三区| 免看一级a毛片一片成人不卡| 日韩av免费网站| 国产精品yjizz视频网一二区| 玖玖在线精品| 亚洲精品成a人| 蜜桃福利入口| 国产特级黄色录像| 国产美女诱惑一区二区| 国产电影一区在线| 欧美久久久久| 成人激情免费电影网址| 永久看片925tv| 不卡一区二区在线| 天天爱天天干天天操| 极品颜值美女露脸啪啪| 日本一区二区三区电影免费观看| 欧美成人三级在线| 亚洲天堂电影网| 999久久久国产精品| 视频一区二区综合| 黄页网站大全一区二区| 动漫av网站免费观看| 天天夜碰日日摸日日澡| 美洲精品一卡2卡三卡4卡四卡| 成人直播在线观看| 老少交欧美另类| 91色婷婷久久久久合中文|