將 nohup 作業帶到前台

將 nohup 作業帶到前台

考慮以下nohup執行:

nohup script.sh > script.out &

有沒有辦法註銷終端,重新連接,將進程帶回前台並使用鍵盤與其互動?

答案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

如果您想啟動腳本,讓它運行而不讓輸出乾擾您的終端,然後稍後將其啟動以與其交互,您可能需要看看終端多路復用器。根據您的系統,我會推薦tmuxscreen。您可以在下面的連結中找到有關如何使用它們的一些資訊:

多工器:

螢幕:

編輯:添加 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.

相關內容