为什么从子shell开始后台进程/为什么parens(someCommand&)?

时间:2017-10-17 21:20:59

标签: linux bash

我遇到了以(myDir/myScript.sh arg1 arg2 &)

运行的脚本

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

如果我在没有创建新子shell的括号的情况下运行脚本myDir/myScript.sh arg1 arg2 &,会不会有任何副作用?

1 个答案:

答案 0 :(得分:3)

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

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

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

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