メモ:ここで説明されている状況は次のように関連しています。これ。
いろいろありますまだついてるスクリーンセッションscreen -list
がありますが、
% screen -list
No Sockets found in /tmp/uscreens/S-jones.
私はSIGCHLD
画面プロセスにシグナルを送信しようとしましたが、その下で実行されているいくつかのシェルも終了しました(これにより、カーネルがいくつかのシグナルをこれらのプロセスに送信できることを願っています)。これらすべての背後にある理論は、そのような信号のためにscreen
適切なソケットです/tmp/uscreens
。しかし、これらのどれも機能しません。
会議がまだ進行中ですが、私ができることはありますか?セッションごとに適切なソケットを再生成しましたか?
答え1
複数のアクティブセッションのデフォルト値を変更するように更新したときにSCREENDIR
これが発生しました。あなたのように私もFIFOを再生成するように説得できなかったので(ここに提出する価値のあるバグレポートがあるかもしれません)、結局私がしたことは次のとおりです。レプテル新しいセッションに関連するすべてを変換します。退屈でしたが、集中し続けました(そしていくつかを学びました)。私が使用した手順は次のとおりです。おそらく単純化したり、スクリプトで書くことができます。
- 変換したい画面PIDを見つけて、そのサブプロセスのリストを取得します(私はこれを使用しました
pstree -ps $PID
)。 - 各サブプロセスに対応するPIDを取得します。
- シェルだったら…
- 他のものが実行されない場合、
reptyr $PID
- 通常のプロセスが実行中の場合、SIGTSTP it(^zまたは
kill -TSTP $PID
)、bg
it、disown $PID
it、およびreptyr $PID; fg
。
- 他のものが実行されない場合、
- コースがある場合子供たち、
reptyr -T $PID
- 正常なコースがあれば
reptyr $PID
- シェルだったら…
これは完璧ではないかもしれません。結局のところ、シェル内のシェルや他のもので終わりますが、それは悪いかもしれません。