簡體   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