如何测试特定进程 ID 是否是终端?

如何测试特定进程 ID 是否是终端?

我正在编写一个方便的脚本,它允许我在按下键盘快捷键时调出一个现有终端,如果当前不存在终端,则生成一个新的终端。

理想情况下,这与我所使用的终端无关,也不需要我维护流行终端的冗长的二进制名称列表。

到目前为止,我对这个主题的搜索都没有结果,但假设我已经:

  • 窗口 ID
  • 进程 ID
  • 进程环境和命令行(通过/proc

如何检查给定的进程是否是终端,而不是浏览器或文件资源管理器?

答案1

终端与其他应用程序之间并没有太大的区别。

如果您通过 /proc/PID/fd 查看其打开的文件描述符,您将看到终端仿真器持有伪终端(通常通过 /dev/ptmx 打开)的“主”端。大多数其他程序不会有这个;它们会连接到另一端(即 /dev/pts/X 上的实际终端或什么都没有)。

请注意,这还将包括具有活动终端输出窗格的 IDE(例如显示构建进度的 VSCode 或带有:terminal 缓冲区的 Neovim),以及 tmux 或 sshd 之类的程序。

相关内容