백그라운드 작업이 무작위로 동작하는 이유는 무엇입니까?

백그라운드 작업이 무작위로 동작하는 이유는 무엇입니까?

겪고있다고급 bash 스크립팅 가이드예제 3.3 백그라운드에서 루프를 실행하여 다음을 발견했습니다.

#!/bin/bash
# background-loop.sh
for i in 1 2 3 4 5 6 7 8 9 10 # First loop.
do
echo -n "$i "
done & # Run this loop in background.
# Will sometimes execute after second loop.
echo # This 'echo' sometimes will not display.
for i in 11 12 13 14 15 16 17 18 19 20 # Second loop.
do
echo -n "$i "
done
echo # This 'echo' sometimes will not display.
# ======================================================
# The expected output from the script:
# 1 2 3 4 5 6 7 8 9 10
# 11 12 13 14 15 16 17 18 19 20
# Sometimes, though, you get:
# 11 12 13 14 15 16 17 18 19 20
# 1 2 3 4 5 6 7 8 9 10 bozo $
# (The second 'echo' doesn't execute. Why?)
# Occasionally also:
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
# (The first 'echo' doesn't execute. Why?)
# Very rarely something like:
# 11 12 13 1 2 3 4 5 6 7 8 9 10 14 15 16 17 18 19 20
# The foreground loop preempts the background one.
exit 0

# Nasimuddin Ansari suggests adding sleep 1
#+ after the echo -n "$i" in lines 6 and 14,
#+ for some real fun.

나는 이것을 이해하지 못합니다. 이것을 이해하는 사람이 있습니까?

답변1

백그라운드 작업은 비동기적으로 실행됩니다. 이는 정의에만 기초하여 실행 순서를 예측할 수 있음을 의미합니다. 이론적으로는 이를 추가하더라도 sleep여전히 문제에 봉착할 수 있습니다. 단지 몇 초만 기다려도 bg 작업의 비동기 특성이 제거되지는 않으며 실제로 수행하는 유일한 작업은 이러한 혼란의 가능성을 줄이는 것입니다.

관련 정보