web-dev-qa-db-ja.com

未使用のgnome端末を閉じる

仕事をしている間、私はたくさんのgnome-terminalを起動し、それらを使って何かをします。 dd最初の端末で、何かをするために多数のサーバーへの12のsshセッション。これらのセッションはジョブを終了しており、アイドル状態のため、またはコマンドの後でセッションが閉じられたために切断されます。

ただし、未使用のgnome-terminalプロセスを閉じるスクリプトが必要です。子プロセスなしですべてのzshプロセスをソフトに強制終了することを考えました。これにより、ターミナルがクリーンな方法で閉じられることを願っています。

init─┬─[...]
     ├─gnome-terminal─┬─gnome-pty-helpe
     │                ├─2*[zsh───ssh]
     │                ├─zsh───dd
     │                ├─zsh───pstree
     │                ├─4*[zsh]                 <<<<
     │                └─{gnome-terminal}
     .
     .
     .

実行中のプロセスをチェックし、zshに子プロセスがなく4時間アクティビティがない場合にそれらを終了する、多かれ少なかれ単純なbashスクリプトを作成することを考えています。

よくわかりません

  • これが一般的に良い考えである場合。
  • 誰かがこれを行うためのツールをすでに公開している場合
  • Zshの子プロセスを取得する方法がある場合(grepingおよびawkingを使用せずにpstree出力;)
  • 最後のアクティビティを取得する方法(zshのpreコマンドとpostコマンドについて考えた)
  • プロセスを終了するためにkill -HUP <zsh pid>よりも良い方法がある場合

前もって感謝します

4
krissi

Zshマニュアルによると

[〜#〜] tmout [〜#〜]このパラメータがゼロ以外の場合、プロンプトを発行してから指定された秒数以内にコマンドが入力されないと、シェルはALRM信号を受信します。 SIGALRMにトラップがある場合、トラップが実行され、トラップの実行後にTMOUTパラメータの値を使用して新しいアラームがスケジュールされます。トラップが設定されておらず、端末のアイドル時間がTMOUTパラメーターの値以上の場合、zshは終了します。それ以外の場合、新しいアラームは最後にキーを押してからTMOUT秒後にスケジュールされます。

私はテストしました

zsh> export TMOUT=10        

シェルが終了すると、上位のgnome-terminalが停止しました。同じメカニズムがbash内でも機能します。これは、シェルプロンプトを発行した後にのみカウントを開始するため、ビジー状態の端末の核兵器に関する懸念に対処します。

状態を失う可能性のある「魔法の」イベントを作成するため、一般的には良い考えではないと思います。選択したウィンドウマネージャーの「ウィンドウを閉じる」キーと「別のウィンドウ(おそらくターミナル)にフォーカスする」キーを使用して、改善することをお勧めします。しかし、プーフィング端末が必要な場合は、これがおそらく最善の方法です。

8
msw

execを使用してコマンドを開始する場合(例:exec ssh *hostname*)、実行中のgnome-terminalは、プロセスが終了すると閉じる必要があります(コマンドの終了時に端末を終了するように設定されていると仮定します。これがデフォルトです)。

ハングしたプロセスにはシェルのタイムアウト機能またはその他のスマートを使用する必要がありますが、ターミナルセッションを閉じようとしているだけの場合は、通常の終了または切断されたリモートを処理します。

0
Seth L