繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM