因此,当我打开 3 个选项卡时,ps aux | grep bash
报告:
$ ps aux | grep bash
root 629 0.0 0.0 2486024 4812 s002 Ss 8:01pm 0:00.02 login -pf moon /bin/bash
moon 513 0.0 0.0 2434460 2508 s001 S+ 8:01pm 0:00.07 -bash
root 512 0.0 0.0 2496264 4884 s001 Ss 8:01pm 0:00.02 login -pf moon /bin/bash
moon 381 0.0 0.0 2434460 2500 s000 S+ 8:00pm 0:00.09 -bash
root 379 0.0 0.0 2498312 4920 s000 Ss 8:00pm 0:00.03 login -pf moon /bin/bash
moon 740 0.0 0.0 2432768 620 s002 R+ 8:01pm 0:00.00 grep bash
moon 630 0.0 0.0 2434460 2500 s002 S 8:01pm 0:00.07 -bash
为什么会发生这种情况?
编辑:将流程渲染为一棵树
| |-+= 04939 moon /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal -psn_0_2322999
| | |-+= 04942 root login -pf moon /bin/bash
| | | \-+= 04943 moon -bash
| | | \-+= 05051 moon man login
答案1
请注意,它不是两个 bash 进程:这是一个bash
过程,也是一个login
带有选项的过程。
这就是 Apple 为新窗口和选项卡实现各种启动选项的方式,例如是否使用默认或当前 shell 的工作目录,或者是否启动默认 shell 或特定 shell。
您会注意到,当您在终端的偏好设置中更改这些选项时,login
命令的参数会发生一些变化。
如果你将所有选项都设置为默认,除了新标签页的工作目录之外,还更改当前标签页的工作目录,那么新标签页的 shell 将通过login -pfl danielbeck /bin/bash -c exec -la bash /bin/bash
而不是来打开login -pf danielbeck
。