久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 進程間通信之信號初體(ti)驗

進程(cheng)間(jian)通(tong)信之(zhi)信號初體驗 時間:2018-09-29      來源(yuan):未知

信號初體驗:

1.信(xin)號(hao)通信(xin)的理解

內核中有通信對(dui)(dui)象,前邊通信對(dui)(dui)象是管道(dao),這里是信號。

如果進(jin)程1想(xiang)與進(jin)程2通(tong)過信號通(tong)信,不能通(tong)過用戶空間(jian),它(ta)必須先告(gao)(gao)訴內核(he),讓內核(he)告(gao)(gao)訴進(jin)程2 如圖所示:

  

2.信號的(de)含(han)義(yi):

下面看內核(he)空間有多少種信號(hao) 可以通過kill 加個選項-l  可以看到內核(he)總共可以發送64種信號(hao):數字代表信號(hao)的(de)ID 后邊的(de)宏代表他(ta)(ta)的(de)功能,每個信號(hao)都有他(ta)(ta)的(de)意義(yi)。

查看每個信(xin)號的含義:

man 7 signal

SIGINT ctrl+c 發出的(de)信號

SIGQUIT ctrl+\  終止程(cheng)序 產生內存映像文件

SIGILL  非法指(zhi)令   

SIGABRT 通過(guo)abort函(han)數(shu)實現程序終止

SIGFPE   除(chu)數(shu)為0 就會產(chan)生這個(ge)信號 叫浮點異常

SIGKILL 必殺信號

SIGSEGV  段錯(cuo)誤 

SIGPIPE  管道(dao)破裂

SIGALRM   alarm是鬧鐘信號,用alarm()函數設(she)置鬧鐘,告訴系統時間到了(le),就會(hui)發送(song)

SIGTERM    終(zhong)止(zhi)信(xin)號 kill命(ming)令就是向進程發這個的(de)信(xin)號

SIGCHLD    子(zi)進程終止(zhi)或停止(zhi)的時候(hou) 會向父進程發此信號

SIGCONT   讓一個暫停的進程繼(ji)續(xu)

SIGSTOP    讓一個進(jin)程暫停(ting)

SIGTSTP    按(an)下CTRL+Z  

3.關(guan)于信(xin)號的發送存(cun)在這兩個個問(wen)題(ti) 

a.內核中很多信(xin)(xin)(xin)號(hao)(hao)(hao)(hao),比如進程1發送(song)信(xin)(xin)(xin)號(hao)(hao)(hao)(hao)給進程2,用戶(hu)空間發送(song)不(bu)了(le),用戶(hu)空間不(bu)具(ju)備(bei)發送(song)信(xin)(xin)(xin)號(hao)(hao)(hao)(hao)的(de)能(neng)力;進程1想讓內核發送(song)信(xin)(xin)(xin)號(hao)(hao)(hao)(hao)給進程2,必須告(gao)訴內核要發什么信(xin)(xin)(xin)號(hao)(hao)(hao)(hao),信(xin)(xin)(xin)號(hao)(hao)(hao)(hao)的(de)編號(hao)(hao)(hao)(hao)是什么。

b.用戶空間有很多進程,對于內(nei)核來(lai)講,到底給哪個進程發送信號?所(suo)以進程1要告訴內(nei)核發信號給應(ying)用層的哪個進程。

因此發(fa)送信號給指定進程需(xu)要(yao)兩個參數(shu):信號的編號和進程的編號。

4.實戰深入(ru)理(li)解

之前學過linux命令kill, kill 9 pid可以殺死指定進程(cheng),9就是編號為(wei)9的(de)信號,我們(men)寫(xie)個程(cheng)序完(wan)成之前的(de)kill 9操作。

第一步:先寫(xie)個”求死”進程。

linux@ubuntu:~$ vim test.c

linux@ubuntu:~$ gcc test.c 



通過kill命(ming)令進(jin)(jin)入(ru)內(nei)核,kill命(ming)令其(qi)實也是(shi)應用(yong)程(cheng)(cheng)序。kill函數是(shi)系統調用(yong)函數,告訴內(nei)核發送(song)9號信號;第二個選項(xiang)是(shi)發送(song)pid,告訴內(nei)核,發給(gei)test.c進(jin)(jin)程(cheng)(cheng),test.c進(jin)(jin)程(cheng)(cheng)就(jiu)會收到這個信號。

這里我們總結下 kill函(han)數的形式:

kill(pid_t pid,int sig)

  pid:整數,要(yao)接收信號的進(jin)程的進(jin)程號

    ;    0 信號被發送(song)到所有和pid進(jin)程(cheng)在同一個進(jin)程(cheng)組的進(jin)程(cheng)

   -1  信號發送給所有的進(jin)程表(biao)中的進(jin)程(除了進(jin)程號大的進(jin)程外)

      sig:信號編號

第二步(bu):使用快捷鍵(jian) CTRL+ALT+T 再打(da)開(kai)一個(ge)終端  寫(xie)個(ge)kill函數,實現kill命(ming)令功能。

linux@ubuntu:~$ vim kill.c

linux@ubuntu:~$ gcc kill.c -o kill

linux@ubuntu:~$ ./kill  9  4245

切換(huan)終端  觀(guan)察(cha)之前的test.c進程

進(jin)程(cheng)4245,也(ye)就是test.c進(jin)程(cheng)已經被killed,實現的過程(cheng)為(wei)kill.c進(jin)程(cheng)發送(song)信(xin)號給內核(he)

內核收到(dao)信(xin)號(hao)9及進程(cheng)編號(hao)4245后 發信(xin)號(hao)給4245,進程(cheng)4245響(xiang)應信(xin)號(hao),執行默認(ren)的信(xin)號(hao)處理(li)方式,即殺死進程(cheng)。

上一篇:Linux音頻ASoC架構驅動解析

下一篇:.h文件與.c文件的基本寫法

熱(re)點(dian)文章推(tui)薦
華清(qing)學員就業榜單
高薪學員經驗分享(xiang)
熱點新聞(wen)推薦
前臺專線:010-82525158 企業培訓洽談專線(xian):010-82525379 院校合作洽談(tan)專線(xian):010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部