実行のために休止状態になったプロセスは、実行中のジョブをリストし、ジョブIDを割り当てることによってフォアグラウンドに戻すことができます^Z
。しかし、雇用情報を個別にリストしようとすると$ jobs
fg %id
画面同じ端末に結果がありません。この目標を達成する方法は?
私が望むのは、同じ端末の別の画面で同じプロセスを終了せずに開始することです。
答え1
あなたはできません。シェル操作(フォアグラウンドおよびバックグラウンドプロセス)の処理は、各個別のシェルインスタンスで実行されます。ある対話型シェルから別の対話型シェルにジョブを移行することはできません。以内にそれはまるでscreen
。
端末は実際にこれとは何の関係もありません。シェルのみを実行します。
tmux
できることは、端末マルチプレクサ(または)を使用してシェルセッション全体を移行することですscreen
。ある端末からセッションを切断しscreen
たり、セッションを確立しtmux
た後に同じコンピュータの別の端末に再接続したりすると、端末の一方のシェルセッションを別の端末に移動できます。
tmux
これは最初に開始し、次にtmux
セッション内でプログラムを開始することによって行われますtmux
。プログラムの実行中にprefixd(デフォルトprefixは)を押してセッションをCtrl+B切り離すことができます。tmux
次に、他の端末でコマンドを実行してセッションをtmux attach
再開します。tmux
分離はコマンドを介して行うこともできますtmux detach
。
screen
tmux
システムのマニュアルを参照してください。
答え2
端末はプロセス(シェルなど)のビューアです。端末自体は何のコマンドも実行しません。これがシェルの目的です。ただし、端末がないと、シェルまたはシェルで実行されているすべてのプログラムと対話することはできません。
通常、ターミナルウィンドウを閉じると、閉じるように信号をシェルに送信し、その結果実行中のすべてのプロセスが終了します。
でプロセスを実行できますscreen
。その機能は、シェルが実行される「仮想端末」を作成することです。 「実際の」端末ウィンドウをセッションに接続し、提供されたscreen
仮想端末を制御できます。screen
最終的な効果は完全に正常に感じられますが、仮想画面から切り離してシェルを実行状態にしておくこともできます。
screen # Create a leader and a virtual terminal/screen running a shell
screen -ls # List sessions (attached/detached)
screen -r # Reattach to the single detached session
screen -r {identifier} # Reattach to the named detached session
screen -md {command...} # Make a new detached session running {command...}
最後に、Ctrl Ad現在のセッションから離れて、Ctrl A?対話型コマンドのリストを取得します。