GNU画面で起動したプログラムを別の端末に移動する


21

GNUのscreen内部で実行中のプロセスを保持しながら、GNUのインスタンスを終了したいです。

そこで、通常のターミナルエミュレータプログラムを開き、画面を実行しました。次に、そのインスタンスを使用しscreenて実行し./script_x.shます。さて、何らかの理由で、私が使用して終了したいscreenscript_x.shまだ完了していないそのタスクを、私は私の進歩を失うことを望んでいませんよ。

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


14
あなたは本当に画面を殺したいですか、それから切り離したいですか?Screenは、通常のセッションを続行できるように、バックグラウンドでプロセスを実行するために使用されることを意図しています。また、ログアウト後もアプリを実行し続けることができます(SSHセッションの切断など)。いつでも画面からデタッチし、通常のセッションを続行し、画面セッションに残った場所からピックアップすることができます。端末エミュレータはこれとは関係ありません。
BlueCacti

または、screenセッション内で別の画面を作成します。
クリリス

11
この質問はXY問題のような匂いがします。
デジタルクリス

7
@ tjt263-そもそもスクリーンの使用を後悔していると言っていますが、スクリーンを使用していなかった場合、プロセスを実行し続けるにはどうしますか?画面内のプロセスでも同じことを行うことができますが、画面には追加の利点があります。画面から切り離すことができ、邪魔されずにプロセスを実行できます。
ジョニー

@DigitalChrisそれは今やるかもしれません。元のタイトルのほうが関連性が高いと思われます。3つの明確なポイントがあります:内部でプログラムを実行していましたscreen。使用をやめたかったscreen。私は内部で実行されていたプログラムを停止したくありませんでしたscreen。それでおしまい。状況を明確にする方法や、これよりも簡単に表現する方法がわかりません。

回答:


31

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

より長い答え:

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

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

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


質問は、あなたの答えが出てから大幅に編集されていることに注意してください。
クリリス

プロセスの切断は非常に簡単です。親プロセスが終了したときに送信されdisownないように、プロセスグループを(下位レベルで、または下位レベルで)設定する問題ですSIGHUP。I / Oを再接続することは、まったく別のことです。デバッガーの出番です
。-アレクシス

あなたは必要ありません。nohupあなたは、ジョブ制御シェル(のようにしている場合はbashkshcshzshash、など)。Bourneのような非ジョブコントロールシェルをまだ使用しているsh場合は、アップグレードする時が来ているかもしれません。

23

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

私はちょうどそれをテストしました(htop内部screenで開始し、reptyr別のターミナルに移動し、killしますscreen)。それでも、それは本当にハックなソリューションなので、保証はありません。


1
gdbを使用するよりもハックが少ない:)
Hennes

14

はい(「killing」が実際にkillingでない場合)、それは実際に画面の目的です。マニュアルを確認して、これらのうちどれがニーズに合うか試してください。

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コマンドラインオプションを選択します。


1
これは質問に答えません。OPは画面からデタッチするのではなく、画面プロセスを終了する必要があります。
Guntram BlohmはMonicaをサポートします

6
はい、彼はそれを書いたが、私は彼が彼が何をしたいのか尋ねたと確信していない。
ゴンバイサンドル

11
@GuntramBlohm OPが画面の仕組みを理解していることはまったく明確ではありません。これが最も望ましいと思われる効果です。
クリリス

2
screenはxtermとは異なる端末ではなく、他の端末からデタッチした後、実際の端末(vterm、xterm、ターミネーター、(m)rxvt、any)に接続できるレイヤー(疑似端末)であることをご存知ですか?そして、画面は、画面内で起動したプロセスを実行し続けるものです(そしてそれはうまく機能します)。画面を強制終了(本当に強制終了)した場合、プロセスの下からラグを引き出します。
ゴンバイサンドル

1
@GombaiSándor:それをしたい理由の1つは、画面が知らない機能を通過させるために、プロセスが端末と直接対話するようにすることです。たとえば、かつて自分のバージョンのxtermをハッキングして、キーボードのすべての奇妙なファンクションキーが、VT102のふりをしようとする代わりに、X11キーシムと完全な修飾子状態を含むエスケープシーケンスを送信するようにし、インストールを開始しましたemacsでのキーバインド。これらのシーケンスは無害で画面を通過しません。
ヘニングマクホルム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.