我在 Linux Mint 中运行一个 Bash 终端。我想查看正在运行的终端的进程 ID。
所以我尝试了两件事:
ps -C 'bash'
ls -l /proc/*/exe | grep bash
这两个都给出了两个进程 ID。有人能解释一下为什么只有一个终端有这两个进程 ID 吗?如何在两个终端之间识别出真正的进程 ID?
谢谢
答案1
端子没有进程 ID。
当然,进程有进程 ID。终端有自己的 ID,您会在w
、who
和 (在TTY
列中)等工具的输出中看到它们ps
。但这些不是进程 ID。
进程和终端之间的关系并不是 1:1。此外,正如grawity
指出的那样,壳不是一个终端。终端是一种设备。shell 是一种程序。bash
程序是一种 shell,其输入和输出(至少在交互模式下)从终端读取并写入终端设备。
个人计算机 Linux 和 Unices 上的终端通常不真实的物理设备,插入某种串行端口。相反,它们要么虚拟的终端或伪终端。两者都是终端仿真器程式。
- 对于虚拟终端来说,该程序嵌入到操作系统内核中(尽管已经有举措改变这一点),并且它没有进程 ID,因为它本身并不是一个独立的进程。
- 对于伪终端,有一个进程管理设备的“主”端,并以某种方式显示终端的内容。通常它是一个 GUI 程序,例如
xterm
、lxterminal
、konsole
、gnome-terminal
或rxvt
。(或者,它可以是 SSH 或 TELNET 守护进程。)这些都有进程 ID。但它是终端模拟器这是一个过程,而不是伪终端设备。
至于为什么您看到两个bash
进程:您有两个bash
进程正在运行。就这么简单。它们不一定与同一终端设备相关联,甚至与任何终端设备相关联。同样,TTY
输出中的列ps
将告诉您什么控制终端每个进程都有。(终端没有进程 ID,但进程在某种程度上有终端 ID。)