nohupジョブをフォアグラウンドに持ってくる


14

次のnohup実行を検討してください。

nohup script.sh > script.out &

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

回答:


7

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

tmux:

画面:

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


+1知らなかった優れたツール。どうもありがとう。
アダムマタン

19

nohupはコマンドを端末から切断せず、スクリプトを無視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)。前景は存在しないため、前景に戻すことはできません。


If the command jobs cannot find it, then it is no longer a child process of that shell.これは間違っています。このシーケンスを試して、方法を確認してくださいsleep 100 & disown ; echo Jobs:; jobs; echo Tree:; pstree -ap $$。このコマンドを実行した後sleepでも、スポーンしたときに同じPIDが出力されたままの作業が表示されますが、jobs何も出力されません。子プロセスが子であるのを停止できる唯一の方法は、親を失う(孤児がの子になるinit)か、分岐+終了(ただし、PIDが変更されるため、元の子ではない)です。
ルスラン

4

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

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


0

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

nohup script.sh 2>&1 script.out &
# later:
tail -f script.out

0

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.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.