プログラムが別の画面で実行されていることを検出できますか?

プログラムが別の画面で実行されていることを検出できますか?

私は非常に弱いハードウェアのスクリーンセッションでインタラクティブな呪いプログラムを実行しています。ほとんどの場合、画面は分離されています。このプログラムがこれを検出し、デフォルトで画面に描画を停止する方法はありますか?

答え1

irssiというスクリプトがあります。screen_away画面接続の有無に応じて不在状態を設定してください。仕組みは次のとおりです。

画面内で実行されるすべてのシェルにはSTY環境変数ソケット名に設定します。以下を実行しscreen -lsて、すべてのソケットが保存されているパスを取得できます。

$ screen -ls

There are screens on:
        11824.pts-24.mmrozek    (Attached)
        2306.ssh        (Detached)
        6615.chat       (Attached)
3 Sockets in /var/run/screen/S-mmrozek.

の実行ビットを確認してください/var/run/screen/.../$STY。設定すると画面が接続され、それ以外の場合は切り離されます。上記の出力では、3つの画面のうち2つが接続されており、その実行ビットがここに設定されていることがわかります。

$ ls -l /var/run/screen/S-mmrozek/

total 0
prwx------ 1 mmrozek mmrozek 0 Oct  5 13:04 11824.pts-24.mmrozek
prw------- 1 mmrozek mmrozek 0 Sep 23 23:45 2306.ssh
prwx------ 1 mmrozek mmrozek 0 Oct  5 12:43 6615.chat

screen -ls含まれている行の出力を確認して、またはで終わるかどうかを$STY確認することもできますが、これを行うには継続して実行する必要があります。(Attached)(Detached)screen

関連情報