我遇到了一个以(myDir/myScript.sh arg1 arg2 &)
运行脚本
据我了解,它是在子外壳中运行脚本,也可以在该子外壳的背景中运行。
如果我在没有创建新子外壳的括号的情况下运行脚本myDir/myScript.sh arg1 arg2 &
,会不会有任何副作用?
在子 shell 中运行它的通常原因是,当后台进程开始和结束时,shell 不会打印消息。
此外,如果脚本使用 wait
命令,它不会等待在 subshell 中启动的后台进程(进程只能等待自己的子进程,而不能等待孙子进程)。
这也意味着,如果脚本在子 shell 中启动,则脚本无法获取后台进程的退出状态——您需要使用 wait
来获取该状态。并且$!
变量不会设置为后台进程的 PID(它在子 shell 内部设置,而不是原始 shell 进程)。
基本上,如果原始shell不需要处理后台进程,则使用(command&)
,它只想启动它并忘记它。