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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

查询linux信号量命令,linux下的trap命令和SIGHUP信号量详解。

發(fā)布時(shí)間:2024/1/23 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 查询linux信号量命令,linux下的trap命令和SIGHUP信号量详解。 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

20) SIGTSTP 停止進(jìn)程的運(yùn)行, 但該信號(hào)可以被處理和忽略. 用戶鍵入SUSP字符時(shí)(通常是Ctrl-Z)發(fā)出這個(gè)信號(hào)

21) SIGTTIN 當(dāng)后臺(tái)作業(yè)要從用戶終端讀數(shù)據(jù)時(shí), 該作業(yè)中的所有進(jìn)程會(huì)收到SIGTTIN信號(hào). 缺省時(shí)這些進(jìn)程會(huì)停止執(zhí)行.

22) SIGTTOU 類似于SIGTTIN, 但在寫終端(或修改終端模式)時(shí)收到.

23) SIGURG 有緊急數(shù)據(jù)或out-of-band數(shù)據(jù)到達(dá)socket時(shí)產(chǎn)生.

24) SIGXCPU 超過(guò)CPU時(shí)間資源限制. 這個(gè)限制可以由getrlimit/setrlimit來(lái)讀取/改變

25) SIGXFSZ 超過(guò)文件大小資源限制.

26) SIGVTALRM 虛擬時(shí)鐘信號(hào). 類似于SIGALRM, 但是計(jì)算的是該進(jìn)程占用的CPU時(shí)間.

27) SIGPROF 類似于SIGALRM/SIGVTALRM, 但包括該進(jìn)程用的CPU時(shí)間以及系統(tǒng)調(diào)用的時(shí)間.

28) SIGWINCH 窗口大小改變時(shí)發(fā)出.

29) SIGIO 文件描述符準(zhǔn)備就緒, 可以開始進(jìn)行輸入/輸出操作.

30) SIGPWR Power failure

對(duì)于2和3信號(hào)量好理解,屏蔽ctrl+c和ctrl+\。但是1信號(hào)量到底什么作用呢?

轉(zhuǎn)自http://blog.csdn.net/cugxueyu/archive/2008/01/16/2046565.aspx

SIGHUP信號(hào)與控制終端

UNIX中進(jìn)程組織結(jié)構(gòu)為 session (會(huì)話)包含一個(gè)前臺(tái)進(jìn)程組及一個(gè)或多個(gè)后臺(tái)進(jìn)程組,一個(gè)進(jìn)程組包含多個(gè)進(jìn)程。一個(gè)session可能會(huì)有一個(gè)session首進(jìn)程,而一個(gè)session首進(jìn)程可能會(huì)有一個(gè)控制終端。一個(gè)進(jìn)程組可能會(huì)有一個(gè)進(jìn)程組首進(jìn)程。進(jìn)程組首進(jìn)程的進(jìn)程ID與該進(jìn)程組ID相等。這兒是可能會(huì)有,在一定情況之下是沒有的。與終端交互的進(jìn)程是前臺(tái)進(jìn)程,否則便是后臺(tái)進(jìn)程。

SIGHUP會(huì)在以下3種情況下被發(fā)送給相應(yīng)的進(jìn)程:

1、終端關(guān)閉時(shí),該信號(hào)被發(fā)送到session首進(jìn)程以及作為job提交的進(jìn)程(即用 & 符號(hào)提交的進(jìn)程)

2、session首進(jìn)程退出時(shí),該信號(hào)被發(fā)送到該session中的前臺(tái)進(jìn)程組中的每一個(gè)進(jìn)程

3、若父進(jìn)程退出導(dǎo)致進(jìn)程組成為孤兒進(jìn)程組,且該進(jìn)程組中有進(jìn)程處于停止?fàn)顟B(tài)(收到SIGSTOP或SIGTSTP信號(hào)),該信號(hào)會(huì)被發(fā)送到該進(jìn)程組中的每一個(gè)進(jìn)程。

系統(tǒng)對(duì)SIGHUP信號(hào)的默認(rèn)處理是終止收到該信號(hào)的進(jìn)程。所以若程序中沒有捕捉該信號(hào),當(dāng)收到該信號(hào)時(shí),進(jìn)程就會(huì)退出。

下面觀察幾種因終端關(guān)閉導(dǎo)致進(jìn)程退出的情況,在這兒進(jìn)程退出是因?yàn)槭盏搅薙IGHUP信號(hào)。login shell是session首進(jìn)程。

首先寫一個(gè)測(cè)試程序,代碼如下:

#include

#include

char **args;

void exithandle(int sig)

...{

printf("%s : sighup received ",args[1]);

}

int main(int argc,char **argv)

...{

args = argv;

signal(SIGHUP,exithandle);

pause();

return 0;

}

程序中捕捉SIGHUP信號(hào)后打印一條信息,pause()使程序暫停。

編譯后的執(zhí)行文件為sigtest。

1、命 令:sigtest front > tt.txt

操 作:關(guān)閉終端

結(jié) 果:tt.txt文件的內(nèi)容為front : sighup received

原 因: sigtest是前臺(tái)進(jìn)程,終端關(guān)閉后,根據(jù)上面提到的第1種情況,login shell作為session首進(jìn)程,會(huì)收到SIGHUP信號(hào)然后退出。根據(jù)第2種情況,sigtest作為前臺(tái)進(jìn)程,會(huì)收到login shell發(fā)出的SIGHUP信號(hào)。

2、命 令:sigtest back > tt.txt &

操 作:關(guān)閉終端

結(jié) 果:tt.txt文件的內(nèi)容為 back : sighup received

原 因: sigtest是提交的job,根據(jù)上面提到的第1種情況,sigtest會(huì)收到SIGHUP信號(hào)。

3、命 令:寫一個(gè)shell,內(nèi)容為[sigtest &],然后執(zhí)行該shell

操 作:關(guān)閉終端

結(jié) 果:ps -ef | grep sigtest 會(huì)看到該進(jìn)程還在,tt文件為空

原 因: 執(zhí)行該shell時(shí),sigtest作為job提交,然后該shell退出,致使sigtest變成了孤兒進(jìn)程,不再是當(dāng)前session的job了,因此sigtest即不是session首進(jìn)程也不是job,不會(huì)收到SIGHUP。同時(shí)孤兒進(jìn)程屬于后臺(tái)進(jìn)程,因此login shell退出后不會(huì)發(fā)送SIGHUP給sigtest,因?yàn)樗粚⒃撔盘?hào)發(fā)送給前臺(tái)進(jìn)程。第3條說(shuō)過(guò)若進(jìn)程組變成孤兒進(jìn)程組的時(shí)候,若有進(jìn)程處于停止?fàn)顟B(tài),也會(huì)收到SIGHUP信號(hào),但sigtest沒有處于停止?fàn)顟B(tài),所以不會(huì)收到SIGHUP信號(hào)。

4、命 令:nohup sigtest > tt

操 作:關(guān)閉終端

結(jié) 果:tt文件為空

原 因: nohup可以防止進(jìn)程收到SIGHUP信號(hào)

至此,我們就清楚了何種情況下終端關(guān)閉后進(jìn)程會(huì)退出,何種情況下不會(huì)退出。

要想終端關(guān)閉后進(jìn)程不退出有以下幾種方法,均為通過(guò)shell的方式:

1、編寫shell,內(nèi)容如下

trap "" SIGHUP #該句的作用是屏蔽SIGHUP信號(hào),trap可以屏蔽很多信號(hào)

sigtest

2、nohup sigtest 可以直接在命令行執(zhí)行,

若想做完該操作后繼續(xù)別的操作,可以 nohup sigtest &

3、編寫shell,內(nèi)容如下

sigtest &

其實(shí)任何將進(jìn)程變?yōu)楣聝哼M(jìn)程的方式都可以,包括fork后父進(jìn)程馬上退出。

總結(jié)

以上是生活随笔為你收集整理的查询linux信号量命令,linux下的trap命令和SIGHUP信号量详解。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。