tcshによる事後のリモートnohup


11

長期(数週間?)のプロセスを実行しているxtermにtcshインスタンスがあります。それが実行されているXvncサーバーは雑草から消えてしまいました。100%のCPUを消費し、応答しません。(これは既知のバグであり、回復できないことを知っています。)

長期プロセスは現在stdoutでブロックされています。

基になるプロセス(tcsh、xtermなど)を強制終了し、その長期的なプロセスを実行し続ける方法はありますか?

screenどうか、答えはありません。知っています。それは私のプロセスではなく、ユーザーのプロセスです。彼らは学習しません。)

回答:


17

この投稿が役立つ場合があります。推奨事項は次のとおりです。

  1. プロセスのバックグラウンド(Ctrl-Z、次にbg
  2. disown -h%[jobid]を実行します(おそらくbash-ismなので、tcshに変換する必要があります)

悪いニュースは、当然のことながら、ということであるBGは、プロセスが実行されている同じシェルで実行される必要があるでしょう...しかし...それはすでにバックグラウンドにされる可能性があります。

本当に悪いニュースは、ということです勘当呼び出しは同じシェルで実行する必要があります。その場合、はい、あなたはめちゃくちゃです。しかし、よくわかりません。おそらくrootが強制的に切断することができます。

うーん。可能性のある良いニュース -んtcshの勘当を自動的に:

tcshが異常終了した場合、tcshは終了時にバックグラウンドで実行されているジョブを自動的に拒否します。

したがって、長期的なプロセスがすでにバックグラウンドで行われている場合、そのtcsh親を強制終了すると、プロセスを続行できるはずです。これで、プロセスは開始ターミナルから切断されました。(そうでない場合は、上記の「悪いニュース」を参照してください。)

残念ながら、これは画面ではないため、実際に再接続することはできません。あなたは多分(最初のリンクから)gdbでそれを偽造することができます:

[...]ダーティなハックにより、プロセスのstdout / stderr / stdinを再度開くことは不可能ではありません。

したがって、空白の画面ウィンドウ(たとえば、スリープを実行するウィンドウ)を作成できます。

そして、例えばgdbを使用してプロセスにアタッチし、いくつかの呼び出しを実行しますclose(0)
呼び出しclose(1)
呼び出しclose(2)
呼び出しopen( "/ dev / pts / xx"、...)
呼び出しdup(0)
dup(0)を呼び出す
detach

プロセスの出力は画面に表示されます。それはその画面ターミナルに接続されないので、たとえば、[sic]はプロセスではなく「sleep」コマンドを強制終了しますが、OPにはそれで十分です。

そのプロセスにも「dup(1)を呼び出す」と「dup(2)を呼び出す」があるべきではないのではないかと思います...


ええ、それはフォアグラウンドプロセスなので、私は気が狂っていると思います。
wfaulk

うん。しかし、あなたが言ったように、それはあなたのプロセスではなく、あなたのせいではありません。ごめんなさい、混乱で立ち往生しています。
quick quixote、

2
これはちょうど私のお尻を保存しました。最初に投稿したのと同じ問題が発生しました。これは、Xサーバー(および、おそらくその間のxterm)が割り込んだときに、プロセスがSTDOUTでブロックされていたことです。STDOUTを閉じる以外は何もする必要がないことがわかりました。その出力は無関係でした。実際のデータはどこかのログファイルにあります。そのため、gdbを使用して接続し、「call close(1)」を実行してから「cont」を実行すると、再び動きます。本当にありがとう!
wfaulkが

ハァッ!面白い。すべての凍結を解除しますか?奇妙。それがあなたを助けてくれてうれしい!
いんちきキホーテ

2
「Ctrl-Z」をフォアグラウンドプロセスに送信することと、SIGSTOPをそのpidに送信することは同じことです。(SIGCONTはプロセスを再開します。)これが同じ状況の他のユーザーに役立つかどうかはわかりませんが、私の簡単なテストでは、SIGSTOPに続いてSIGCONTを送信すると、 "Ctrl-Z"に続いてが重複しbgます。
wfaulk 2014年

3

これらの質問は、Cryopidと呼ばれるプログラムを参考にしています。しかし、私はそれについての経験はありません。

ホスト間でのプロセスの移動

Xセッション間でのxtermの移動

nohupとプロセスのスクリーニング


CryoPIDはすごくきれいに聞こえますが、私には一連のプロセスがあり、少なくともまだ、複数のプロセスのフリーズと再開をサポートしていません。
wfaulk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.