为什么 OS X 每个选项卡创建两个 bash 进程?

为什么 OS X 每个选项卡创建两个 bash 进程?

因此,当我打开 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

相关内容