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

如圖,提交到后臺以后,會告訴你當前窗口的命令編號"[1]",以及該進程在系統中的進程編號64746。
你可以通過以下兩個方式,停掉你后臺的程序:
法子1:在該窗口找到命令編號,然后執行kill %num,如kill %1
法子2:或者利用系統進程編號,然后執行kill pid,如64746
當進程提交太久,找不到兩個編號的時候,我們可以通過以下命令進行查看:
1. 使用ps -ef |grep test.sh可查看到正在運行的test.sh腳本進程。
2. jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated。(展示該窗口下提交的任務),以及命令編號。
ps命令的使用,見linux常用命令——ps。
也可以通過以下命令查看詳細信息:
ps -aux | grep "test.sh"
#a:顯示所有程序 u:以用戶為主的格式來顯示 x:顯示所有程序,不以終端機來區分
其他使用技巧:
- 將后臺中的命令調至前臺繼續運行。如果后臺中有多個命令,可以用fg %jobnumber(是命令編號,不是進程號)將選中的命令調出。
- 將一個在后臺暫停的命令,變成在后臺繼續執行。如果后臺中有多個命令,可以用bg %jobnumber將選中的命令調出。
命令詳解:
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
這是放在系統中的定時任務,晚上22點時候執行這個任務,啟動這個python的腳本,并把日志寫在test.log文件中。
使用實例:
下載:使用aspera下載EBI數據庫的測序數據。(如果大家感興趣,接下來可以寫一下關于公共數據庫下載的內容。)
nohup ascp -QT -l 100M -i ~/asperaweb_id_dsa.openssh [email protected]:/vol1/fastq/SRR310/004/SRR3101254/SRR3101254.fastq.gz . &
nohup+命令+&:將命令放置到后臺運行,并且斷開連接依舊運行,QT參數可以斷點續存并且加到最大速度。
忘記掛后臺了怎么辦?
- ctrl + z 把程序掛起,jobs 查看任務狀態。是否已經被停止和命令編號[num]
- 使用bg %num命令把作業號為1的任務放入后臺,并從停止狀態變為運行狀態,相當于加了&后接著運行。
- 運行disown -h %num,表示在終端關閉時不對作業號為1的程序發送終止信號,外部因素將不影響程序的運行。
nohup和disown都可以使程序不掛斷,可以獲得一樣的效果,但原理不太一致。
nohup可以使程序忽略掛斷信號(SIGHUP)或者使程序脫離終端的控制,從而終端不能再對其發送掛斷信號(SIGHUP);
disown則是內生于shell,告訴shell在終止時不對對應程序發送掛斷信號(SIGHUP)。