web-dev-qa-db-ja.com

Nohupジョブをフォアグラウンドに

以下を考慮してください Nohup 実行:

Nohup script.sh > script.out &

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

13
Adam Matan

スクリプトを開始し、出力を端末に煩わせることなく実行し、後で起動してスクリプトとやり取りしたい場合は、端末マルチプレクサを調べてください。お使いのシステムに応じて、tmuxまたはscreenをお勧めします。以下のリンクでそれらの使用方法に関する情報を見つけることができます:

tmux:

画面:

編集:tmuxプライマーのリンクを追加

7
Gus E

Nohup は、ターミナルからコマンドを切断せず、スクリプトを無視させます 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で実行されている場合でも、Nohupを使用してbashでバックグラウンドジョブをフォアグラウンドに戻すことができます。ただし、出力リダイレクトは変更されず、ファイルNohup.outに引き続き送信されます。

$ fg
Nohup ./script.sh

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

18
souravc

次に、ターミナルマルチプレクサーを使用しますが、スクリーンではなく tmux を使用します。画面は、すべての意図と目的のために、維持されていません。その構成は暗い芸術であり、ネクロノミコンの付録に最初に記録された可能性があります。独自の設定を作成しようとすると、Cthuluを垣間見ることができます。真剣に。人々の 。screenrc files を見てください。確かに、設定ファイルの画面の憎悪を仲介する方法があります。 Byob は、致命的なユーザーと不浄なコードの間のベールとして見事な仕事をします。賢明な色、メニューインターフェイス、そしておそらく最も重要なステータスバーが付属しています。

しかし、私が言ったように、代わりに tmux をお勧めします。まだいくつかのマイナーな設定が必要ですが、それは 十分に文書化されています であり、設定ファイルは意味のないものに見えません。また、色とステータスバーから始めます。 screenrcとtmux.confファイルを比較します。

4
djeikyb

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.を使用して、これらのタスクをフォアグラウンドに移動できます

0
Sudip Bhandari

ライブハットを見ることに興味がある場合、これはあなたに合っているかもしれません:

Nohup script.sh 2>&1 script.out &
# later:
tail -f script.out
0
con-f-use