多線程獨立if
語句在bash腳本中的正確方法是什麼?將代碼包含在if
之後或者在表達式之後放置&
是否最好?多線程Bash如果語句
對於表達式後面的&
,如果if
包含大塊代碼,則根據需要繼續線程是有意義的。但是,如果一行代碼也以&
結束?
表達後:
if [ expression ] &
then
#task
fi
任務後:
if [ expression ]
then
#task &
fi
試想3點if
聲明,所有的執行相互獨立的任務,如何做執行工作,不同位置的&
?根據我的理解,如果放在表達式之後,所有3個表達式都開始(基本上)同時進行,3個任務也是如此。
#Thread 1 #Thread 2 #Thread 3
if [ expr1 ] & if [ expr2 ] & if [ expr3 ] &
then then then
task1 task2 task3
fi fi fi
wait
如果放置在任務代碼之後,第一if
將進行評價,並僅作爲第一任務開始將所述第二if
進行評價。這些任務比同時進行得更多。
#Thread 1 #Thread 2 #Thread 3
if [ expr1 ]
then
task1 & if [ expr2 ]
fi then
task2 & if [ expr3 ]
fi then
task3 &
fi
wait
表達不能被組合以做內部穿線if
如:
if [ combined expression ]
then
#task1 &
#task2 &
#task3 &
fi
在我的具體情況下,我認爲這很好他們是獨立的進程。當等待完成時,「等待」是否結束子進程? – Matt
非常好,是的。等待所有子子進程完成。所以如果你在'wait'後面有更多的語句,那麼這些語句將不會執行,直到所有的子進程完成。如果你想等待一個特定的子進程結束,'wait'也可以帶一個PID或作業ID。您可以在使用'&'背景後,從內置的'$!'變量中獲取子進程的pid。 –