濮阳杆衣贸易有限公司

主頁 > 知識庫 > 淺析Linux中使用nohup及screen運(yùn)行后臺任務(wù)的示例和區(qū)別

淺析Linux中使用nohup及screen運(yùn)行后臺任務(wù)的示例和區(qū)別

熱門標(biāo)簽:咸陽穩(wěn)定外呼系統(tǒng)公司 電銷機(jī)器人怎么錄音 征服者快捷酒店地圖標(biāo)注 貴陽語音電銷機(jī)器人 蕪湖呼叫中心外呼系統(tǒng)哪家強(qiáng) 貴港市機(jī)器人外呼系統(tǒng)團(tuán)隊(duì) 漯河電銷外呼系統(tǒng)價(jià)格 ec外呼系統(tǒng)怎么樣 天津外呼系統(tǒng)運(yùn)營商

使用SSH終端(比如putty,xshell)連接Linux服務(wù)器上運(yùn)行比較耗時(shí)任務(wù),可能需要幾個(gè)小時(shí)甚至幾天才能完成,這時(shí)候終端被占據(jù),我們還要做其他的任務(wù)呢,所以需要將這一類耗時(shí)任務(wù)放到后臺來跑,只需要記錄好日志就行了,有下面這些常用方法來實(shí)現(xiàn)這個(gè)需求。

command &

在終端輸入command &運(yùn)行,這時(shí)候使用Ctrl + C中止命令將會失效,因?yàn)閷?amp;后臺運(yùn)行SIGINT1信號免疫,程序會繼續(xù)運(yùn)行。 但如果你直接關(guān)掉終端, 進(jìn)程將跟著中止。 可見,使用&后臺運(yùn)行的進(jìn)程會被SIGHUP2信號中止,但是你如果用exit命令正常退出終端,程序?qū)⒗^續(xù)運(yùn)行在后臺不會中止。

nohup command

標(biāo)準(zhǔn)輸出會被默認(rèn)追加到當(dāng)前目錄下的nohup.out中,如果當(dāng)前目錄的nohup.out文件不可寫,輸出重定向到 $HOME/nohup.out文件中。

那么,我們很容易想到將這兩個(gè)特性綜合一下這樣運(yùn)行命令:

nohup command > /home/user/myfile.log 2>&1 &

這樣將會在后臺一直執(zhí)行這個(gè)任務(wù)直到完成,并將程序標(biāo)準(zhǔn)輸出(1)標(biāo)準(zhǔn)錯(cuò)誤(2)都定向到/home/user/myfile.log文件中。

screen工具

screen可以理解為一個(gè)會話窗口管理工具,對于一般的使用,我們只需要會使用下面在這些操作即可:

# 使用yum安裝screen
yum install screen
# 創(chuàng)建一個(gè)名為test的會話窗口
screen -S test
# 暫離窗口
Ctrl+a d(即按住Ctrl,依次再按a,d)
# 查看存在的會話窗口
screen -ls
# 進(jìn)入窗口
screen -r test
screen -r 進(jìn)程ID
# 關(guān)閉窗口
exit
# 窗口切換
Ctrl+a c :在當(dāng)前screen會話中創(chuàng)建窗口
Ctrl+a w :窗口列表
Ctrl+a n :下一個(gè)窗口
Ctrl+a p :上一個(gè)窗口
Ctrl+a 0-9 :在第0個(gè)窗口和第9個(gè)窗口之間切換

有了在screen工具,我們就可以在終端上創(chuàng)建窗口,然后運(yùn)行需要的命令,然后暫離,然后就可以繼續(xù)做其他的事情了,當(dāng)然,也可以用其他的終端連接服務(wù)器后使用screen -r 命令連接需要的窗口,會發(fā)現(xiàn)程序一直在運(yùn)行,退出終端也不會影響到那些暫離的終端上運(yùn)行的程序。

測試:

我們寫一個(gè)測試腳本test.sh:

#!/bin/sh
for ((i=1; i<1000; i++))
do
  d=`date '+%Y-%m-%d %H:%M:%S'`
  echo "$d 第 $i 次輸出;"
  tt
  sleep 2s
done
Bash

只使用&后臺運(yùn)行:

[root@localhost test.cc]# ./test.sh > test.log 2>&1 &
[1] 15037
[root@localhost test.cc]# ps -aux | grep test.sh
root   15037 0.0 0.0 113180 1424 pts/0  S  16:10  0:00 /bin/sh ./test.sh
root   15045 0.0 0.0 112712  992 pts/0  S+  16:10  0:00 grep --color=auto test.sh
Bash

可以看到15037進(jìn)程在運(yùn)行;

如果直接關(guān)閉終端,日志記錄就停止了,說明進(jìn)程隨著終端會話的結(jié)束而停止執(zhí)行了;

但是,經(jīng)過反復(fù)測試發(fā)現(xiàn),如果使用exit命令正常退出終端,再連上終端后,使用&運(yùn)行的程序繼續(xù)在運(yùn)行,也就是&命令跟nohup效果是一樣的,我這里使用的測試環(huán)境是CentOS7.6。

使用nohup &運(yùn)行

[root@localhost test.cc]# nohup ./test.sh > test.log 2>&1 &
[1] 14349

測試結(jié)果,直接關(guān)閉終端或者使用exit命令退出終端,程序都會繼續(xù)執(zhí)行。

使用screen運(yùn)行

# 創(chuàng)建窗口
screen -S test
# 運(yùn)行命令,這里可以不用后面的&,只是程序會把窗口占用
./test.sh > test.log 2>&1 &
# 暫離
Ctrl + a d

這時(shí)候可以直接關(guān)閉終端了,然后重新連接,發(fā)現(xiàn)程序依然在運(yùn)行,如果要找到窗口連接:

# 存在的窗口
[root@localhost ~]# screen -ls
There is a screen on:
  18048.test (Detached)
1 Socket in /var/run/screen/S-root.
# 進(jìn)入窗口
[root@localhost ~]# screen -r test

進(jìn)入之后會發(fā)現(xiàn),窗口依然保持著暫離之前的狀態(tài),包括之前輸入的程序和命令,當(dāng)你在窗口中輸入exit命令退出窗口,如果你前面命令后面沒有使用&,程序?qū)兄?,因?yàn)橄鄬τ趖est窗口來說,這是一個(gè)前臺程序,窗口退出了程序自然就跟著中止了。

因?yàn)閟creen的暫離功能,可以實(shí)現(xiàn)暫離窗口中保持前臺程序的繼續(xù)運(yùn)行,相對于真正的終端而言,就相當(dāng)于后臺運(yùn)行了。

程序終止(interrupt)信號, 在用戶鍵入INTR字符(通常是Ctrl-C)時(shí)發(fā)出,用于通知前臺進(jìn)程組終止進(jìn)程 ↩︎

終端連接結(jié)束時(shí)發(fā)出, 通常是關(guān)閉終端, 通知同一session內(nèi)的各個(gè)進(jìn)程組 ↩︎

總結(jié)

以上所述是小編給大家介紹的淺析Linux中使用nohup及screen運(yùn)行后臺任務(wù)的示例和區(qū)別,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

標(biāo)簽:東營 西藏 香港 濰坊 怒江 淮北 攀枝花 西寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺析Linux中使用nohup及screen運(yùn)行后臺任務(wù)的示例和區(qū)別》,本文關(guān)鍵詞  淺析,Linux,中,使用,nohup,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《淺析Linux中使用nohup及screen運(yùn)行后臺任務(wù)的示例和區(qū)別》相關(guān)的同類信息!
  • 本頁收集關(guān)于淺析Linux中使用nohup及screen運(yùn)行后臺任務(wù)的示例和區(qū)別的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    蓝山县| 遵义市| 嵩明县| 门源| 吉安市| 隆安县| 柳河县| 依兰县| 阿拉善右旗| 奉节县| 固镇县| 城口县| 历史| 江都市| 江达县| 右玉县| 安陆市| 安吉县| 沅江市| 大厂| 古交市| 怀安县| 台东市| 长泰县| 丽江市| 贵南县| 沿河| 南丰县| 长汀县| 大庆市| 孝义市| 岗巴县| 威远县| 青浦区| 余姚市| 阿合奇县| 祁连县| 顺昌县| 江安县| 北宁市| 兴安县|