nohupジョブをフォアグラウンドにする

nohupジョブをフォアグラウンドにする

次のことを考慮してくださいnohup実行:

nohup script.sh > script.out &

ターミナルからログオフし、再接続し、プロセスをフォアグラウンドに戻し、キーボードを使用して操作する方法はありますか?

答え1

ノーフープターミナルからコマンドを切断しないので、スクリプトは無視されますSIGHUPstdout/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で実行されていても、bashでバックグラウンドジョブをフォアグラウンドに戻すことができますnohup。しかし、それは変更しません。出力リダイレクトは、依然としてファイルに送られますnohup.out

$ fg
nohup ./script.sh

シェル/ターミナルを閉じるかログオフすると、コマンドはそのシェルの子ではなくなります。initプロセス。検索すると、pstree現在プロセス 1 ( ) によって所有されていることがわかりますinit。フォアグラウンドが存在しないため、フォアグラウンドに戻すことはできません。

答え2

スクリプトを開始し、出力がターミナルに煩わされることなく実行し、後でターミナルを起動して操作したい場合は、ターミナル マルチプレクサを検討してください。システムに応じて、tmuxまたはをお勧めしますscreen。以下のリンクに、それらの使用方法に関する情報があります。

tmux:

画面:

編集: tmux入門へのリンクを追加しました

答え3

端末マルチプレクサの使用には賛成ですが、tmuxスクリーンではなく、スクリーンです。スクリーンは、あらゆる意味でメンテナンスされていません。その設定は暗黒の芸術であり、おそらくネクロノミコンの付録に最初に記録されました。独自の設定を書こうとするのは、クトゥルフの片鱗のようなものです。本当に。周りの人の.screenrc ファイル確かに、screen の設定ファイルの悪影響を緩和する方法はあります。びょうぶ人間と不浄なコードの間のベールとして、見事な役割を果たしています。 わかりやすい色彩、メニュー インターフェイス、そしておそらく最も重要なステータス バーが備わっています。

しかし、私がお勧めするのはtmux代わりに、いくつかの小さな設定が必要ですが、十分に文書化されているすると、設定ファイルが意味不明な文字にならなくなります。また、色とステータス バーが表示されます。私の 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 daemon) を実行しています。[1]、[2]、[3] は、これらのタスクのそれぞれのジョブ番号です。

これらのタスクをフォアグラウンドにするには、fg %$taskNumber.

関連情報