[英]Why start a background process from a subshell / why parens in (someCommand &)?
我遇到了一个运行的脚本(myDir/myScript.sh arg1 arg2 &)
根据我的理解,它在子shell中运行脚本,也在子shell的后台运行。
如果我运行脚本myDir/myScript.sh arg1 arg2 &
没有创建新子shell的括号,会不会有任何副作用?
在子shell中运行它的常见原因是shell在后台进程启动和结束时不会打印消息。
此外,如果脚本曾使用wait
命令,它将不会等待在子shell中启动的后台进程(一个进程只能等待自己的子进程,而不是孙进程)。
这也意味着如果脚本在子shell中启动,则脚本无法获取后台进程的退出状态 - 您需要使用wait
来获取它。 和$!
变量不会被设置为后台进程的PID(它在子shell中设置,而不是原始的shell进程)。
基本上,你使用(command&)
如果原始shell不需要处理后台进程,它只是想启动它而忘记它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.