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