关闭未使用的 gnome 终端

关闭未使用的 gnome 终端

在工作时,我启动了很多 gnome 终端并用它们做一些事情。dd在第一个终端上,与一组服务器进行 12 个 ssh 会话来执行某些操作。这些会话正在完成其工作,并因空闲或因为会话在命令后关闭而断开连接。

但是,我需要一个脚本来关闭未使用的 gnome 终端进程。我考虑过轻柔地杀死所有没有子进程的 zsh 进程。这有望以一种干净的方式关闭终端。

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

我正在考虑编写一个或多或少简单的 bash 脚本来检查正在运行的进程,如果 zsh 没有子进程并且 4 小时没有活动,则结束它们。

我不确定

  • 如果这通常是一个好主意。
  • 如果有人已经发布了一个工具来做到这一点
  • 如果有办法获取 zsh 的子进程(无需greping 和awkingpstree输出;)
  • 我如何获得最后一个活动(考虑 zsh 中的前置和后置命令)
  • kill -HUP <zsh pid>如果有比结束进程更好的方法

提前致谢

答案1

根据zsh手册

TM输出 如果此参数非零,则如果在发出提示后指定的秒数内未输入命令,shell 将收到 ALRM 信号。如果 SIGALRM 上有陷阱,则会执行该陷阱,并在执行陷阱后使用 TMOUT 参数的值安排新的警报。如果没有设置trap,并且终端的空闲时间不小于TMOUT参数的值,则zsh终止。否则,新警报将在最后一次按键后 TMOUT 秒内安排。

我测试过

zsh> export TMOUT=10        

当 shell 退出时,高级 gnome 终端就死掉了。相同的机制也适用于 bash。这确实解决了您对破坏繁忙终端的担忧,因为它仅在发出 shell 提示后才开始计数

我认为这通常不是一个好主意,因为它会创建可能会丢失状态的“神奇”事件。我建议您更好地使用您选择的窗口管理器的“关闭窗口”和“聚焦另一个窗口(可能是终端)”键。但如果你确实想要终端机,这可能是最好的方法。

答案2

如果您使用exec启动命令(例如exec ssh *hostname*),则在进程退出时,它运行的 gnome 终端应该关闭(假设您将其设置为在命令退出时退出终端,这是默认设置)。

您仍然需要使用 shell 的超时功能或其他智能来处理挂起的进程,但是如果您只是尝试关闭终端会话,那么这将处理正常退出或断开的远程连接。

相关内容