実行中のプロセスを拒否し、それを新しいスクリーンシェルに接続する方法は?

実行中のプロセスを拒否し、それを新しいスクリーンシェルに接続する方法は?

SSHシェルで実行されるプログラムがあります。一時停止して再び戻ったときに実行の一時停止を解除できるようにしたいです。

私が考えた1つの方法は、所有権をスクリーンシェルに転送してそこで実行し続けることです。

続行する他の方法はありますか?

答え1

以下を使用して、シェルでプログラムの「所有権」を取り消すことができます。disown内蔵:

# press Ctrl+Z to suspend the program
bg
disown

SIGHUPただし、これはシェルが終了したときにプログラムにシグナルを送信しないようにシェルに指示するだけです。プログラムは通常、標準入力、出力、およびエラーストリームとして端末へのすべての接続を維持します。他の端末に再接続できません。 (画面各ウィンドウの端末をシミュレートして動作するため、プログラムは画面ウィンドウに接続されます。 )


プログラムをデバッガーに接続して(たとえば、次のように)、ファイル記述子を別のファイルに再接続できます。ptrace)そしてそれを呼び出すopenと、それを行うツールがあります。可能性は次のとおりです(回答から収集されたリンクdupclose実行中のプロセスを拒否し、それを新しいスクリーンシェルに接続する方法は?そしてすでに起動しているプロセスをnohup / screenできますか?):

答え2

GNUを使用するのがscreen最善の選択です。

最初のログイン時に画面の実行を開始 - 実行し、screen -D -Rコマンドを実行してから切断または一時停止し、次にキーを押してCTRL-Z画面をCTRL-A切断しますD

コンピュータに再度ログインしたら、を実行して再接続しますscreen -D -R。以前と同じシェルになります。これにより、jobs中断されたプロセスビューを実行してから実行%1(またはそのタスク#)を実行して、フォアグラウンドに戻すことができます。

答え3

端末間でプロセスを移動したり、拒否されたプロセスを再接続したりするには、次のようにします。レプテル

答え4

次の小さなユーティリティもあります。レティ実行中のプログラムを別の端末に再接続できます。

関連情報