Bash
子shell是否預設並行執行?
這個問題來自它的答案之一,即閱讀Linuxtopia - Chapter 20. Subshells的建議。
Linuxtopia 網站上的這個聲明讓我有點困惑:
子shell 讓腳本進行並行處理,實際上同時執行多個子任務。
https://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/subshells.html
這是否意味著從腳本執行的子shell 總是與原始腳本並行執行?從實驗上看,情況似乎並非如此,但我會很感激專家以一種或另一種方式確認。
#! /usr/bin/bash # This script reliably prints: # hello # world # 0 # ...implying that the the subshell is not run in parallel with this script. (echo hello; echo world) echo $?
.
#! /usr/bin/bash # This script prints: # 0 # hello # world # ...implying that the the subshell is run in parallel with this script. (echo hello; echo world) & echo $?
是使用
&
Linuxtopia 網站的意思嗎?$$ letting $$腳本做並行處理“?注意:我熟悉
&
在 bash 中為命令添加後綴的概念……它將所述命令作為後台程序執行。所以我的問題更多的是關於在子shell中執行的命令是否預設作為後台/並行程序執行,或者是否在&
此處添加也是導致後台/並行執行的原因。對我來說,Linuxtopia 文章的措辭暗示了前者,這似乎與觀察不符。
取決於您如何創建子外殼。
( command )
將command
在子shell 中執行並等待子shell 完成,然後再繼續。
command &
將command
在後台的子shell中執行。shell 將繼續執行下一個命令,而無需等待子 shell 完成。這可以用於並行處理。
coproc command
與 類似command &
,但也在主殼和子殼之間建立了雙向管道。