当我登录到我的 unix 终端并执行以下操作时ps
:
bash-4.3$ ps
PID TTY TIME CMD
7 pts/0 00:00:00 sh
16 pts/0 00:00:00 bash
17 pts/0 00:00:00 ps
我知道bash
process 是正在运行的 shell,但是其他两个名为sh
和 的进程又如何呢ps
?
哪儿来的呢?
运行ps -f
返回:
UID PID PPID C STIME TTY TIME CMD
cg 7 1 0 01:04 pts/0 00:00:00 sh
cg 16 7 0 01:04 pts/0 00:00:00 /bin/bash
cg 18 16 0 01:18 pts/0 00:00:00 ps -f
那么这是否意味着bash
shell 正在作为sh
shell 的进程运行?
答案1
这嘘实用程序是一种命令语言解释器,应执行从命令行字符串、标准输入或指定文件读取的命令。应用程序应确保要执行的命令以中描述的语言表达外壳命令语言
附注显示当前正在运行的进程。这是有道理的,因为我们只是在运行“嘘”,“重击”和“ps”目前使用此终端。
答案2
这是一个有趣的三人组。通常,当您登录并运行不带标志的 ps 时,您将获得登录 shell 和 ps 程序。默认情况下,ps 将显示具有相同 EUID 和相同 tty 的所有进程。
所以 shell 和 ps 的出现并不是很不寻常。
你有两件有趣的事情:
- 第一个 shell 的父 PID 是 PID 1
- 你有两个贝壳
在我的系统上,父进程 ID 用于登录进程或窗口终端进程。我不确定你的 PPID 是如何为 1 的。
就像您登录后,您的登录 shell 是 sh,然后您输入了 bash。
答案3
您列出了 3 个进程。
Unix 中 sh 的问题在于 Bourne shell。许多 Unix 将 sh 作为默认 shell,然后又提供了 Bourne Again shell (bash),因为它提供了很多 sh 没有的选项。
如果您意识到,您的 sh 的 PID 低于您的 bash。 bash 在 sh 之后运行,可能超过它。
ps 出现是因为当它执行时,该命令正在使用中,所以它的进程在机器中。