&で端末から開始されたプロセスを特定の端末に再接続する方法はありますか?たとえば、私はケイトを次のように始めました:
kate &
そして今、私は与えられたターミナルにプロセスを再アタッチしたいと思います。
ここには2つの問題があります。
1)HUPによる死亡とその回避:
シェルでプログラムを開始してからそのシェルを終了すると、すべての子プロセスが強制終了されます。これには、バックグラウンドで実行されているプログラムが含まれます。 (例のkate &
のように、コマンドの最後に&で始まるものだけでなく、中断したプロセスも controlz そしてbg
)。
シェルを閉じると、どちらも死亡します。* 1
これを回避するには、バックグラウンドプログラムをdisown
ingします。その後は実行を継続しますが、シェルのフォアグラウンドに戻すことはできません。
Nohup(Nohup kate &
など)を使用して、プログラムからの出力をファイルに保存できます。ただし、シェルに完全に再接続することもできなくなりました。
2)端末エミュレータ。
端末をエミュレートするプログラムを起動することもできます。このプログラムは、端末に再接続できるように特別に構築されています。 screen
とtmux
は、この2つの例です。
画面の使用例:
screen
(開始画面。デフォルトでは、これにより新しいシェルが開始されます)。kate
(ケイトを開始)。logout
別のコンピュータまで歩くか、数時間後に戻ってきます。 (または両方:))-ホストにログインまたはsshします。 -screen -r
(画面に再接続します。ケイトを実行しているシェルに戻ります。
画面に役立つコマンド:
画面-d
画面プログラムの外部から画面を切り離します。
使用制御AD 画面の内側から外します。
screen -r画面に再接続します(たとえば、別の場所から)
screen -dr
接続されている画面がある場合は、まずそれを切り離します。次に、ローカルに接続します。
便利なのは、オフィスでそれを切り離し、自宅からログインするのを忘れた;)
画面-x
他のセッションを閉じずに、実行中の画面にアタッチします。共有デバッグ、ヘルプセッションなどに役立ちます。
* 1:編集:これに答えたとき、私はすべてのシェルが常にすべての子にsigHUPを送信すると想定しました。ただし、これはオプションであり、シェルによっては構成可能である場合があります。場合によっては、それはもはやデフォルトではありません。
例1:bashでは、組み込みコマンド shopt を使用してこのオプションを構成できます。 (shopt -s huponexit
)。
例2:zshで setopt
HUP
が必要です。
fg
は、現在のターミナルの背景から前景に何かをもたらします。