我正在编写一个方便的脚本,它允许我在按下键盘快捷键时调出一个现有终端,如果当前不存在终端,则生成一个新的终端。
理想情况下,这与我所使用的终端无关,也不需要我维护流行终端的冗长的二进制名称列表。
到目前为止,我对这个主题的搜索都没有结果,但假设我已经:
- 窗口 ID
- 进程 ID
- 进程环境和命令行(通过
/proc
)
如何检查给定的进程是否是终端,而不是浏览器或文件资源管理器?
答案1
终端与其他应用程序之间并没有太大的区别。
如果您通过 /proc/PID/fd 查看其打开的文件描述符,您将看到终端仿真器持有伪终端(通常通过 /dev/ptmx 打开)的“主”端。大多数其他程序不会有这个;它们会连接到另一端(即 /dev/pts/X 上的实际终端或什么都没有)。
请注意,这还将包括具有活动终端输出窗格的 IDE(例如显示构建进度的 VSCode 或带有:terminal 缓冲区的 Neovim),以及 tmux 或 sshd 之类的程序。