不中斷的在后臺(tái)運(yùn)行test.sh:
nohup ./test.sh &
其中,“&” : 只在后臺(tái)運(yùn)行
nohup : 不掛斷的運(yùn)行,注意并沒有后臺(tái)運(yùn)行的功能,就是指,用nohup運(yùn)行命令可以使命令永久的執(zhí)行下去,和用戶終端沒有關(guān)系,例如我們斷開SSH連接都不會(huì)影響他的運(yùn)行。
注意了nohup沒有后臺(tái)運(yùn)行的意思、&才是后臺(tái)!!!

如圖,提交到后臺(tái)以后,會(huì)告訴你當(dāng)前窗口的命令編號(hào)"[1]",以及該進(jìn)程在系統(tǒng)中的進(jìn)程編號(hào)64746。
你可以通過以下兩個(gè)方式,停掉你后臺(tái)的程序:
法子1:在該窗口找到命令編號(hào),然后執(zhí)行kill %num,如kill %1
法子2:或者利用系統(tǒng)進(jìn)程編號(hào),然后執(zhí)行kill pid,如64746
當(dāng)進(jìn)程提交太久,找不到兩個(gè)編號(hào)的時(shí)候,我們可以通過以下命令進(jìn)行查看:
1. 使用ps -ef |grep test.sh可查看到正在運(yùn)行的test.sh腳本進(jìn)程。
2. jobs -l選項(xiàng)可顯示所有任務(wù)的PID,jobs的狀態(tài)可以是running, stopped, Terminated。(展示該窗口下提交的任務(wù)),以及命令編號(hào)。
ps命令的使用,見linux常用命令——ps。
也可以通過以下命令查看詳細(xì)信息:
ps -aux | grep "test.sh"
#a:顯示所有程序 u:以用戶為主的格式來顯示 x:顯示所有程序,不以終端機(jī)來區(qū)分
其他使用技巧:
- 將后臺(tái)中的命令調(diào)至前臺(tái)繼續(xù)運(yùn)行。如果后臺(tái)中有多個(gè)命令,可以用fg %jobnumber(是命令編號(hào),不是進(jìn)程號(hào))將選中的命令調(diào)出。
- 將一個(gè)在后臺(tái)暫停的命令,變成在后臺(tái)繼續(xù)執(zhí)行。如果后臺(tái)中有多個(gè)命令,可以用bg %jobnumber將選中的命令調(diào)出。
命令詳解:
nohup command > myout.file 2>&1 &
0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error)
2>&1是將標(biāo)準(zhǔn)錯(cuò)誤(2)重定向到標(biāo)準(zhǔn)輸出(&1),標(biāo)準(zhǔn)輸出(&1)再被重定向輸入到myout.file文件中。默認(rèn)情況下,后臺(tái)運(yùn)行的報(bào)告信息會(huì)被導(dǎo)入到目錄下的nohup.out文件中。
0 22 * * * Python/ target=_blank class=infotextkey>Python test.py > test.log 2>&1
這是放在系統(tǒng)中的定時(shí)任務(wù),晚上22點(diǎn)時(shí)候執(zhí)行這個(gè)任務(wù),啟動(dòng)這個(gè)python的腳本,并把日志寫在test.log文件中。
使用實(shí)例:
下載:使用aspera下載EBI數(shù)據(jù)庫的測(cè)序數(shù)據(jù)。(如果大家感興趣,接下來可以寫一下關(guān)于公共數(shù)據(jù)庫下載的內(nèi)容。)
nohup ascp -QT -l 100M -i ~/asperaweb_id_dsa.openssh [email protected]:/vol1/fastq/SRR310/004/SRR3101254/SRR3101254.fastq.gz . &
nohup+命令+&:將命令放置到后臺(tái)運(yùn)行,并且斷開連接依舊運(yùn)行,QT參數(shù)可以斷點(diǎn)續(xù)存并且加到最大速度。
忘記掛后臺(tái)了怎么辦?
- ctrl + z 把程序掛起,jobs 查看任務(wù)狀態(tài)。是否已經(jīng)被停止和命令編號(hào)[num]
- 使用bg %num命令把作業(yè)號(hào)為1的任務(wù)放入后臺(tái),并從停止?fàn)顟B(tài)變?yōu)檫\(yùn)行狀態(tài),相當(dāng)于加了&后接著運(yùn)行。
- 運(yùn)行disown -h %num,表示在終端關(guān)閉時(shí)不對(duì)作業(yè)號(hào)為1的程序發(fā)送終止信號(hào),外部因素將不影響程序的運(yùn)行。
nohup和disown都可以使程序不掛斷,可以獲得一樣的效果,但原理不太一致。
nohup可以使程序忽略掛斷信號(hào)(SIGHUP)或者使程序脫離終端的控制,從而終端不能再對(duì)其發(fā)送掛斷信號(hào)(SIGHUP);
disown則是內(nèi)生于shell,告訴shell在終止時(shí)不對(duì)對(duì)應(yīng)程序發(fā)送掛斷信號(hào)(SIGHUP)。