web-dev-qa-db-ja.com

実行中のプロセスをスクリーニングする

スクリーンセッションでプログラムを実行するのを忘れて、途中で停止できないことがありますが、時間がかかることはわかっています。

再起動せずに、すでに実行中のプロセスをスクリーニングする方法はありますか?

24
LiraNuna

ServerFault で重複が見つかりました。

その投稿にない別の解決策は、スクリーンセッションを開始した後に retty を使用することです。

7
LiraNuna

earl のserverfaultでこの回答が見つかりました:

ただし、実際の問題については、もう1つ試すことができます。ターミナルからジョブを起動した後、次のように入力してジョブをバックグラウンドで実行します。 ctrl-z そしてbg
その後、ジョブをその親シェルからデタッチします-bash:_disown -h %<jobid>_で。その後、ターミナルを安全に閉じることができ、ジョブは実行を継続します。

そしてこれは Rob Wells からの同じ質問からのものです:

_$ screen -S my_process_
$ retty $(pgrep my_process)
_/redraw_

12
warren

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

reptyr-「再ptying」のためのツール

プログラム。

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

使用法

reptyr PID

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

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

5
DaveJohnston