スクリーンセッションでソケットを再生成するようにどのように通知できますか?

スクリーンセッションでソケットを再生成するようにどのように通知できますか?

メモ:ここで説明されている状況は次のように関連しています。これ


いろいろありますまだついてるスクリーンセッションscreen -listがありますが、

% screen -list
No Sockets found in /tmp/uscreens/S-jones.

私はSIGCHLD画面プロセスにシグナルを送信しようとしましたが、その下で実行されているいくつかのシェルも終了しました(これにより、カーネルがいくつかのシグナルをこれらのプロセスに送信できることを願っています)。これらすべての背後にある理論は、そのような信号のためにscreen適切なソケットです/tmp/uscreens。しかし、これらのどれも機能しません。

会議がまだ進行中ですが、私ができることはありますか?セッションごとに適切なソケットを再生成しましたか?

答え1

複数のアクティブセッションのデフォルト値を変更するように更新したときにSCREENDIRこれが発生しました。あなたのように私もFIFOを再生成するように説得できなかったので(ここに提出する価値のあるバグレポートがあるかもしれません)、結局私がしたことは次のとおりです。レプテル新しいセッションに関連するすべてを変換します。退屈でしたが、集中し続けました(そしていくつかを学びました)。私が使用した手順は次のとおりです。おそらく単純化したり、スクリプトで書くことができます。

  1. 変換したい画面PIDを見つけて、そのサブプロセスのリストを取得します(私はこれを使用しましたpstree -ps $PID)。
  2. 各サブプロセスに対応するPIDを取得します。
    • シェルだったら…
      • 他のものが実行されない場合、reptyr $PID
      • 通常のプロセスが実行中の場合、SIGTSTP it(^zまたはkill -TSTP $PID)、bgit、disown $PIDit、およびreptyr $PID; fg
    • コースがある場合子供たちreptyr -T $PID
    • 正常なコースがあればreptyr $PID

これは完璧ではないかもしれません。結局のところ、シェル内のシェルや他のもので終わりますが、それは悪いかもしれません。

関連情報