次のことを考慮してください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
で実行されていても、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.