2012-08-13 5 views
23

これはこういうことです。私の家では、私の機関のサーバーにsshというプログラムを実行しなければなりませんでした。私はセッションが終了したときに私のプログラムを終了させたくなかった(私は約screenを知らなかった)。孤立したバックグラウンドプロセスをフォアグラウンドに戻すにはどうすればいいですか?

私がしたことは、Ctrl+Zを押して、bgと入力して、バックグラウンドで実行するようにしました。 セッションが終了しました。今では私の機関のマシンからログインしてps -u usernameと入力すると、プログラムはまだ実行中ですが、フォアグラウンドに持っていくことはできません。

私はfgjobsを試しましたが、これらのコマンドで出力が得られません。
助けてください。

答えて

17

"screen"コマンドを使用せずにプロセスを開始した場合、そのプロセスを引き継ぐことはできません。基本的には、別のシェルで開始されたプロセスを引き継ぐことはできません。

セッションが終了すると、すべてのbgプロセスがデタッチ状態になります。このプロセスの詳細を見ることができるかもしれませんが、後でログインしてシェルにそれらをfgできません。

8

プロセスが孤立している場合は、別のシェルに "reparent"することはできず、fg、bg 、^ Z、^ Cなどを制御することができます。

孤立したプロセスの制御方法を暗黙のうちに尋ねているようです。 psコマンドを使用してプロセスを確認できるので、そのpidがあります。このpidをのkillコマンドの引数として使用すると、プロセスを停止、続行、または終了できます。プロセスが終了するのを待つことはできませんが、 "kill -0 <pid>"コマンドを使用してポーリングして、まだ存在するかどうかを確認することができます。

4

https://serverfault.com/questions/55880/moving-an-already-running-process-to-screen

トップの答えはReptyrを使用することを提案、この質問への代替ビューを提供します。

+1

他の投稿からの短い回答:可能です。 'reptyr'をインストールしてから' reptyr [PID] 'を実行してください。しかし、あるプロセス(例えばbashスクリプト)が別の(サブ)プロセスを開始した場合、これはうまくいきません。 – BurninLeo

関連する問題