当一个进程以“&”启动时,bash 将新进程放置到前台组一小段时间,然后将自己放回前台组。
据我所知,当我们在没有“&”后台操作符的情况下运行任何外部命令时,shell 会为该命令创建一个新的进程组,并通知终端该进程组现在位于前台。当我们使用“&”运行时,前台进程组不得更改。
我在 linux 上使用了一个 C 程序,它只在启动时打印前台进程组和自己的进程组,然后在睡眠后打印它们。
我得到以下结果:
tcgetpgrp=19981 getpgrp=19981
sleep(5)
tcgetpgrp=11996 getpgrp=19981
在本例中,11996 是 bash 的 pid。
(./test&)
我只在以重负载(从不)运行时才注意到这种行为./test&
。
bash 的行为是否正确?
重击版本:4.4.12
编辑
按照@Costi 的建议添加了 pid 值:
tcgetpgrp=29148 getpgrp=29148 getpid=29149
sleep
tcgetpgrp=28566 getpgrp=29148 getpid=29149
28566 是 bash 的 pid