假设我运行这个命令:coproc nested { sleep 10; }
它在子shell中按预期执行sleep命令。当我运行ps T --forest
命令时,进程树看起来像这样。
PID TTY STAT TIME COMMAND
40305 pts/0 Ss 0:00 bash
46922 pts/0 S 0:00 \_ bash
46923 pts/0 S 0:00 | \_ sleep 10
46924 pts/0 R+ 0:00 \_ ps T --forest
没问题,这正是我所期待的。但是,当我像这样运行命令时:coproc nested { (sleep 10); }
,进程树看起来与运行ps T --forest
命令时相同。
PID TTY STAT TIME COMMAND
40305 pts/0 Ss 0:00 bash
47064 pts/0 S 0:00 \_ bash
47065 pts/0 S 0:00 | \_ sleep 10
47066 pts/0 R+ 0:00 \_ ps T --forest
请注意,在这里,(sleep 10)
是一个进程列表,它应该自动创建一个子shell来运行sleep 10
命令。
所以,我期待的是这样一个过程树:
bash
\_ bash
| \_bash
| \_ sleep 10
\_ps T --forest
1条答案
按热度按时间0lvr5msh1#
当一个子shell只包含一个命令时,
bash
会进行优化,不会派生额外的子shell。在子进程中放置多个命令。:
是一个内置的命令,什么也不做。