既に実行中のプロセスを画面に移動する


222

私のオフィスの仕事では、私がVNCを介してLinuxボックスに接続しているのを日常的に見ています。

時々、コンソールでリモートジョブを開始し、後で予想よりはるかに長く実行されることに気付きます。(そもそもScreenの下で起動しているはずです...)

VNCセッションを開いたままにするためだけに、ワークステーションを一晩稼働させたくありません。既に実行中のリモートジョブを(リモートボックスで)Screenセッションに移動したいので、ワークステーションの電源を切って(そして翌朝再接続して)ください。

どうすればこれを行うことができますか?


2
serverfault.com/questions/49877 / ...-それはできません。
ポールディクソン




screenifyスクリプトを検索します。
Vashu

回答:


217

まさにそれを行うreptyrを見てください。githubページにはすべての情報があります。

reptyr-プログラムを「再試行」するためのツール。

reptyrは、既存の実行中のプログラムを取得して新しい端末に接続するためのユーティリティです。ssh経由で長時間実行されるプロセスを開始しましたが、終了する必要があり、中断したくないですか?画面を起動し、reptyrを使用してそれを取得し、sshセッションを終了して家に向かいます。

使用法

レプティルPID

「reptyr PID」は、ID PIDのプロセスを取得し、現在の端末に接続します。

接続後、プロセスは^ Cや^ Zを含む新しいターミナルから入力を受け取り、新しいターミナルに出力を書き込みます。(残念ながら、バックグラウンドで実行する場合は、古い端末で「bg」または「fg」を実行する必要があります。これは、シェルにパッチを当てずに適切な方法で修正することは不可能です。)


22
私のように、あなたが上記のリンクを見て、ソースからプログラムをインストールすることを簡単に考えたなら、心を動かしてください。それapt-getはDebianシステム上でただ離れているだけです。
mlissner 14年

3
これはうまく機能しますが、これを見たことがありませんか?
deed02392

3
これはすごい!できれば10回賛成します!また、reptyrはRedHatリポジトリでも利用可能です。ただ「yum install」するだけです。
マークJ.ボバック

5
最も些細な場合を除いて機能しませんUnable to attach. (This most commonly means that 11690 has a suprocesses)
。– Mehrdad

2
少なくともルートとしては、使用することができますreptyr -T PID
ChristophK

45

これを簡単に行うことはできません。コンソールを開いた後に最初に行うこととして、画面を起動することを習慣にすることをお勧めします。

ただし、実際の問題については、別の方法を試してみることもできます。端末からジョブを起動した後、ctrl-zを押してからを入力してバックグラウンドにしますbg。その後、ジョブを親シェルから切り離します。バッシュでやるよdisown -h %<jobid>。その後、端末を安全に閉じることができ、ジョブの実行が継続されます。


3
私の場合、これは非常にうまくいきました。reptyrとrettyはどちらもプロセスの取得に失敗しましたが、必要なのはターミナルを閉じてプロセスを実行できるようにすることだけでした。
STW

10
参考までに、プロセスを否認した後は、screen内でレプティルすることができます
アダム14年

1
これは私の実行中のプログラムを殺した:(
Mehrdad

39

Linuxを使用している場合、新しく起動した画面プロセス内でrettyを使用するのはどうですか?

$ screen -S my_process
$ retty $(pgrep my_process)
/redraw

HTH

乾杯、


1
rettyを知らなかった、ありがとう。しかし、私が念頭に置いている長期的な仕事の種類については、自分自身を「非常に軽くテストされた」と呼ぶツールを使用することに少し消極的です。私は伯爵の解決策に行きます。

1
Gentoo
Sergeiで

4858に接続できません
アーノルドロア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.