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