Linux 技巧:讓進(jìn)程在后臺(tái)可靠運(yùn)行的幾種方法

來(lái)自于這篇文章:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/

  • 首先我們?cè)诤笈_(tái)運(yùn)行一個(gè)任務(wù)
[root@training ~]# ping www.baidu.com >/dev/null 2>&1 &
[root@training ~]# ps -ef | grep ping
root      7699  7243  0 20:04 pts/1    00:00:00 ping www.baidu.com
root      7701  7243  0 20:05 pts/1    00:00:00 grep ping
[root@training ~]# ps -ef | grep 7243
root      7243  7239  0 19:59 pts/1    00:00:00 -bash
root      7699  7243  0 20:04 pts/1    00:00:00 ping www.baidu.com
root      7873  7243  0 20:07 pts/1    00:00:00 ps -ef
root      7874  7243  0 20:07 pts/1    00:00:00 grep 7243
[root@training ~]# ps -ef | grep 7239
root      7239 14432  0 19:59 ?        00:00:00 sshd: root@pts/1 
root      7243  7239  0 19:59 pts/1    00:00:00 -bash
root      7914  7243  0 20:08 pts/1    00:00:00 grep 7239
[root@training ~]# ps -ef | grep 14432
root      7239 14432  0 19:59 ?        00:00:00 sshd: root@pts/1 
root      8004  7243  0 20:08 pts/1    00:00:00 grep 14432
root     14432     1  0 Dec06 ?        00:00:00 /usr/sbin/sshd
[root@training ~]# ps -ef | grep init
root         1     0  0 Nov08 ?        00:00:00 /sbin/init

ping這個(gè)后臺(tái)進(jìn)程的PID是7699,其父進(jìn)程是7243
7243這個(gè)進(jìn)程是-bash鸟妙,其父進(jìn)程是7239
7239這個(gè)進(jìn)程是sshd: root@pts/1 听盖,其父進(jìn)程是14432
14432這個(gè)進(jìn)程是/usr/sbin/sshd卤妒,其父進(jìn)程是1
1這個(gè)進(jìn)程就是/sbin/init

通過(guò)pstree這個(gè)命令我們可以看得更清楚

init─┬─abrtd
     ├─acpid
     ├─agetty
     ├─sshd───sshd───bash─┬─ping
     │                    └─pstree

/sbin/init產(chǎn)生了/usr/sbin/sshd廷臼,
/usr/sbin/sshd產(chǎn)生了一個(gè)虛擬終端pts/1伞访,
pts/1給出了bash這個(gè)shell恩静,
然后我們?cè)赽ash上運(yùn)行ping這個(gè)進(jìn)程
當(dāng) ssh 斷開(kāi)連接時(shí)骤铃,HUP 信號(hào)自然會(huì)影響到它下面的所有子進(jìn)程(包括我們新建立的 ping 進(jìn)程)谆焊。


  • 那么當(dāng)用戶(hù)注銷(xiāo)或者網(wǎng)絡(luò)斷開(kāi)的時(shí)候惠桃,終端會(huì)收到HUP(hangup信號(hào)),從而關(guān)閉所有子進(jìn)程辖试,

因此辜王,我們的解決辦法就有兩種途徑:要么讓進(jìn)程忽略 HUP 信號(hào),要么讓進(jìn)程運(yùn)行在新的會(huì)話里從而成為不屬于此終端的子進(jìn)程罐孝。

  • 讓進(jìn)程忽略 HUP 信號(hào)
[root@training ~]# nohup ping www.baidu.com >/dev/null 2>&1 &
[root@training ~]# ps -ef | grep ping
root     10605  7243  0 20:45 pts/1    00:00:00 ping www.baidu.com
root     10616  7243  0 20:45 pts/1    00:00:00 grep ping

nohup能通過(guò)忽略 HUP 信號(hào)來(lái)使我們的進(jìn)程避免中途被中斷呐馆,這樣sshd被kill之后,ping變成孤兒進(jìn)程莲兢,就會(huì)被init收養(yǎng)摹恰,此時(shí)的pstree為

init─┬─abrtd
     ├─acpid
     ├─agetty
     ├─ping
     ├─sshd───sshd───bash───pstree
  • 讓進(jìn)程運(yùn)行在新的會(huì)話里從而成為不屬于此終端的子進(jìn)程。
[root@training ~]# setsid ping www.baidu.com >/dev/null 2>&1 &
[root@training ~]# jobs
[1]+  Done                    setsid ping www.baidu.com > /dev/null 2>&1
[root@training ~]# ps -ef | grep ping
root     11061     1  0 20:51 ?        00:00:00 ping www.baidu.com
root     11103  7243  0 20:51 pts/1    00:00:00 grep ping

setsid之后馬上運(yùn)行jobs的話怒见,可以看到這個(gè)后臺(tái)進(jìn)程俗慈,但是再運(yùn)行jobs的話看不到任何進(jìn)程了。

  • &
    這里還有一個(gè)關(guān)于 subshell 的小技巧遣耍。我們知道闺阱,將一個(gè)或多個(gè)命名包含在“()”中就能讓這些命令在子 shell 中運(yùn)行中,從而擴(kuò)展出很多有趣的功能舵变。
[root@training ~]# (ping www.baidu.com >/dev/null 2>&1 &)
[root@training ~]# ps -ef | grep ping
root     11652     1  0 20:59 pts/1    00:00:00 ping www.baidu.com
root     11697  7243  0 20:59 pts/1    00:00:00 grep ping

當(dāng)我們將"&"也放入“()”內(nèi)之后酣溃,我們就會(huì)發(fā)現(xiàn)所提交的作業(yè)并不在作業(yè)列表中瘦穆,也就是說(shuō),是無(wú)法通過(guò)jobs來(lái)查看的赊豌。

從上例中可以看出扛或,新提交的進(jìn)程的父 ID(PPID)為1(init 進(jìn)程的 PID),并不是當(dāng)前終端的進(jìn)程 ID碘饼。
因此并不屬于當(dāng)前終端的子進(jìn)程熙兔,從而也就不會(huì)受到當(dāng)前終端的 HUP 信號(hào)的影響了。

  • disown

disown 能幫助我們來(lái)事后補(bǔ)救當(dāng)前已經(jīng)在運(yùn)行了的作業(yè)艾恼,但是我并沒(méi)有找到disown的yum源住涉,在網(wǎng)上也沒(méi)找到……

這里要注意的是:
CTRL+z可以將當(dāng)前任務(wù)掛起,并放到后臺(tái)钠绍,此時(shí)處于stopped狀態(tài)舆声,
bg %n可以讓后臺(tái)stopped的進(jìn)程在后臺(tái)繼續(xù)進(jìn)行,變?yōu)閞unning柳爽,
fg %n可以將后臺(tái)的線程拿到前臺(tái)來(lái)執(zhí)行

  • screen

screen是一個(gè)很強(qiáng)大的工具媳握,可以建立一個(gè)偽終端。

init─┬─abrtd
     ├─acpid
     ├─screen───bash───ping
     ├─sshd───sshd───bash───pstree

要注意的是:
在偽終端界面時(shí)磷脯,要通過(guò)CTRL+A+D來(lái)退出這個(gè)偽終端毙芜,回到原來(lái)的終端,參考這里:http://bg.artuion.com/linux/325.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末争拐,一起剝皮案震驚了整個(gè)濱河市腋粥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌架曹,老刑警劉巖份殿,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梧疲,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)嘶是,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)闻丑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)关顷,“玉大人邢享,你說(shuō)我怎么就攤上這事〗潘冢” “怎么了覆旱?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)核无。 經(jīng)常有香客問(wèn)我扣唱,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任噪沙,我火速辦了婚禮炼彪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘正歼。我一直安慰自己辐马,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布局义。 她就那樣靜靜地躺著喜爷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旭咽。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天赌厅,我揣著相機(jī)與錄音穷绵,去河邊找鬼。 笑死特愿,一個(gè)胖子當(dāng)著我的面吹牛仲墨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播揍障,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼目养,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了毒嫡?” 一聲冷哼從身側(cè)響起癌蚁,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兜畸,沒(méi)想到半個(gè)月后努释,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咬摇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年伐蒂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肛鹏。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逸邦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出在扰,到底是詐尸還是另有隱情缕减,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布芒珠,位于F島的核電站烛卧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜总放,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一呈宇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧局雄,春花似錦甥啄、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至宫盔,卻和暖如春融虽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灼芭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工有额, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人彼绷。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓巍佑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親寄悯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萤衰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容