相关疑难解决方法(0)

为什么 (...) 在后台运行时不会产生新的子进程?

运行命令后

{ sleep 5; } &  
Run Code Online (Sandbox Code Playgroud)

输出ps是(输出1)

 PID TTY           TIME CMD
  972 ttys000    0:00.27 -bash
 2556 ttys000    0:00.00 -bash
 2557 ttys000    0:00.00 sleep 5   
Run Code Online (Sandbox Code Playgroud)

而对于

( sleep 5 ) &    
Run Code Online (Sandbox Code Playgroud)

ps是(输出 2)

PID TTY           TIME CMD
 972 ttys000    0:00.28 -bash
2566 ttys000    0:00.00 sleep 5  
Run Code Online (Sandbox Code Playgroud)

()导致子shell环境,我希望在这种情况下为“输出1”,因为它会导致子进程分叉,而我希望{ sleep 5; } &在当前shell中执行时为“输出2” 。这可能看起来是一个愚蠢的问题,但我真的不明白这种行为。
我在这里缺少什么?

bash command subshell

5
推荐指数
1
解决办法
3783
查看次数

标签 统计

bash ×1

command ×1

subshell ×1