Bash

子shell是否預設並行執行?

  • December 6, 2019

這個問題來自它的答案之一,即閱讀Linuxtopia - Chapter 20. Subshel​​ls的建議。

Linuxtopia 網站上的這個聲明讓我有點困惑:

子shell 讓腳本進行並行處理,實際上同時執行多個子任務。

https://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/subshel​​ls.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 &,但也在主殼和子殼之間建立了雙向管道。

引用自:https://unix.stackexchange.com/questions/555843