作業中、私は多くのGNOME端末を実行して作業を行います。dd
最初の端末では、いくつかのタスクを実行するためにサーバーセットと一緒に12のSSHセッションがあります。これらのセッションは操作を完了しており、アイドル状態であるか、コマンドの後にセッションが閉じられ、接続が切断されました。
ただし、未使用のgnome端末プロセスを終了するにはスクリプトが必要です。子プロセスがないすべてのzshプロセスをスムーズに終了することを検討しました。その後、端末はきれいに閉じます。
init─┬─[...]
├─gnome-terminal─┬─gnome-pty-helpe
│ ├─2*[zsh───ssh]
│ ├─zsh───dd
│ ├─zsh───pstree
│ ├─4*[zsh] <<<<
│ └─{gnome-terminal}
.
.
.
私は実行中のプロセスをチェックし、zshにサブプロセスがなく、4時間アクティビティがない場合は終了するために、やや単純なbashスクリプトを書くつもりです。
よく分からない
- 一般的に良いアイデアなら。
- 誰もがこれを行うツールをリリースした場合
- zshの子プロセスを取得する方法がある場合(
grep
ingおよびawk
ingpstree
出力なし;) - 最後のアクティビティをどのように取得できますか(zshの事前およびポストコマンドを検討してください)
kill -HUP <zsh pid>
プロセスを終了するよりも良い方法がある場合
事前にありがとう
答え1
zshマニュアルによると
TM出力 このパラメータがゼロ以外の場合、プロンプトが表示された後に指定された秒数以内にコマンドが入力されない場合、シェルはALRM信号を受信します。 SIGALRMにトラップがある場合は、トラップが実行され、トラップが実行された後にTMOUTパラメータの値を使用して新しいアラームがスケジュールされます。 Trapが設定されておらず、端末のアイドル時間がTMOUTパラメータ値以上の場合、zshは終了します。それ以外の場合は、最後のキーを押してからTMOUT秒以内に新しいアラームがスケジュールされます。
私はテストしました
zsh> export TMOUT=10
シェルが終了すると、高度なGNOME端末が終了します。同じメカニズムがbashでも機能します。これは、シェルプロンプトが実行された後にのみ計算を開始するため、使用中の端末を損傷することに関する懸念を解決します。
私はこれが状態が失われる可能性がある「魔法の」イベントを生成するので、一般的に良い考えではないと思います。選択したウィンドウマネージャの「ウィンドウを閉じる」と「他のウィンドウ(おそらく端末)に焦点を合わせる」キーをよりよく活用することをお勧めします。しかし、本当に端末が欲しいなら、これはおそらく最良の方法でしょう。
答え2
exec
開始コマンド(例:)を使用する場合は、exec ssh *hostname*
プロセスの終了時に実行中のgnome端末を閉じる必要があります(デフォルトのコマンドが終了したときに端末を終了するように設定したと仮定)。
停止したプロセスを処理するには、シェルのタイムアウト機能やその他のインテリジェンスを使用する必要がありますが、ターミナルセッションを閉じようとすると、通常のシャットダウンまたはリモート切断が処理されます。