答案1
諾哈普不會從終端機斷開命令,它會使您的腳本忽略SIGHUP
,並重定向stdout/stderr
到一個文件nohup.out
,以便該命令可以在您登出後繼續在後台運行。
nohup
不會自動將其運行的命令放在背景。必須透過以&
.
$ nohup ./script.sh &
[1] 3390
$ nohup: ignoring input and appending output to ‘nohup.out’
jobs
可以列印目前正在運行的作業及其狀態。如果該命令jobs
找不到它,那麼它就不再是子行程那個殼的。
$ jobs
[1]+ Running nohup ./script.sh &
fg
即使使用 .bashrc 運行,也可以使用 bash 將後台作業帶回前台nohup
。但這不會改變輸出重定向,仍然會轉到文件nohup.out
。
$ fg
nohup ./script.sh
如果關閉 shell/終端或登出,您的命令將不再是該 shell 的子命令。它屬於init
過程。如果您進行搜索,pstree
您將看到它現在屬於進程 1 ( init
)。無法將其帶回前台,因為前台已不存在。
答案2
如果您想啟動腳本,讓它運行而不讓輸出乾擾您的終端,然後稍後將其啟動以與其交互,您可能需要看看終端多路復用器。根據您的系統,我會推薦tmux
或screen
。您可以在下面的連結中找到有關如何使用它們的一些資訊:
多工器:
螢幕:
編輯:添加 tmux 引物的鏈接
答案3
我會支援使用終端多工器,但是多路復用器,不是螢幕。出於所有意圖和目的,Screen 都沒有維護。它的配置是一門黑暗藝術,很可能會先記錄在《死靈之書》的附錄中。嘗試編寫自己的配置就像是克蘇魯的一瞥。嚴重地。看看周圍的人.screenrc 文件。可以肯定的是,有一些方法可以調解螢幕對設定檔的厭惡。螢幕部作為凡人用戶和邪惡程式碼之間的面紗,它做了令人欽佩的工作。它配備了合理的顏色、選單介面,也許最重要的是,還有一個狀態列。
但正如我所說,我推薦多路復用器反而。它仍然需要一些小的配置,但它是有據可查,並且您的設定檔不會看起來像亂碼。此外,您也可以從顏色和狀態列開始。比較我的 screenrc 和 tmux.conf 檔案:
答案4
任何 Linux 命令都可以發送到後台,並&
在最後附加「」。
若要查看所有背景作業,您可以發出jobs
jobs
[1] + suspended nohup sh zookeeper-server-start.sh ../config/zookeeper.properties
[2] running nohup sh kafka-server-start.sh ../config/server.properties
[3] - running nohup sudo mongod --dbpath=/var/lib/mongodb
這裡我在後台運行 3 個作業:zookeeper、kafka 和 mongo 守護程式。 [1]、[2] 和 [3] 是這些任務各自的作業編號。
您可以使用以下命令將這些任務帶到前台fg %$taskNumber.