为什么要从子 shell 启动后台进程/为什么要在 (someCommand &) 中添加括号?

ava*_*412 2 linux bash

我遇到过一个正在运行的脚本(myDir/myScript.sh arg1 arg2 &)

根据我的理解,它在子 shell 中以及该子 shell 的后台运行脚本。

myDir/myScript.sh arg1 arg2 &如果我运行不带括号的脚本来创建新的子 shell,会产生任何副作用吗?

Bar*_*mar 6

在子 shell 中运行它的通常原因是,当后台进程启动和完成时,shell 不会打印消息。

另外,如果脚本使用过该wait命令,它不会等待在子 shell 中启动的后台进程(进程只能等待自己的子进程,而不能等待孙进程)。

这也意味着如果脚本在子 shell 中启动,则脚本无法获取后台进程的退出状态 - 您需要使用wait来获取它。并且该$!变量不会被设置为后台进程的PID(它是在子shell中设置的,而不是原始shell进程中设置的)。

基本上,(command&)如果原始 shell 不需要处理后台进程,它只是想启动它并忘记它,那么您可以使用它。