web-dev-qa-db-ja.com

GNU screenoutで開始されたプログラムを別の端末に移動します

GNU screenのインスタンスを終了し、その中で実行されているプロセスを保持したい。

そこで、通常のターミナルエミュレータプログラムを開いて画面を実行しました。次に、screenのインスタンスを使用して./script_x.shを実行しました。さて、なんらかの理由でscreenの使用をやめたいのですが、script_x.shはまだタスクを完了しておらず、進行状況を失うつもりはありません。

通常のターミナルエミュレーター内で作業を継続するために、アクティブなプロセスを存続させることはできますか?

21
voices

TLDR:実用的な答え:いいえ。

長い答え:

理論的にはできます。 画面内からNohup myprog &のようなものを開始した場合、それは実行を継続します。ハングアップ信号を無視し、入力はありませんが、理論上は引き続き作業できます。

実際には、これは当てはまりません。したがって、実行中のプロセスにデバッガーを接続し、そのファイルハンドルを書き換え、画面を閉じるときにプロセスが-1シグナルを処理することを確認したい場合を除いて、答えはノーです。

これを行う準備ができている場合は、[SU] 誰かがそれを行った場所 を指すブックマークを自宅に持っています。簡単で簡単なことではなく、素晴らしさのために保存されています。

31
Hennes

reptyr を使用して、すでに実行中のアプリケーションを別の端末に再接続してみてください。ただし、プロセスをバックグラウンドに送信する際にいくつかの問題があります。

テストしたところ(htop内でscreenを開始し、reptyrを別の端末に移動し、screenを強制終了します)、問題なく動作しているようです。それでも、それは本当にハッキーなソリューションなので、保証はありません。

23
aland

はい(「殺害」が本当に殺害ではない場合)、それは実際にはまさに画面の目的です。マニュアルを確認して、ニーズに合ったものを試してください。

C-a d
C-a C-d     (detach)      Detach screen from this terminal.

C-a D D     (pow_detach)  Detach and logout.

次に必要なのは、選択に応じて、画面の-D/-d -R/-rコマンドラインオプションです。

14
Gombai Sándor