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