나는 bash에서 다음과 같이하면 조건이 충족되기를 기다릴 수 있다는 것을 안다.
while true; do
test_condition && break
sleep 1
done
그러나 각 반복마다 하나의 하위 프로세스를 만듭니다 (슬립). 나는 그렇게함으로써 그들을 피할 수 있었다.
while true; do
test_condition && break
done
그러나 그것은 많은 CPU를 사용합니다 (바쁨 대기). 하위 프로세스와 바쁜 대기를 피하기 위해 솔루션 벨로우즈를 생각해 냈지만 추악합니다.
my_tmp_dir=$(mktemp -d --tmpdir=/tmp) # Create a unique tmp dir for the fifo.
mkfifo $my_tmp_dir/fifo # Create an empty fifo for sleep by read.
exec 3<> $my_tmp_dir/fifo # Open the fifo for reading and writing.
while true; do
test_condition && break
read -t 1 -u 3 var # Same as sleep 1, but without sub-process.
done
exec 3<&- # Closing the fifo.
rm $my_tmp_dir/fifo; rmdir $my_tmp_dir # Cleanup, could be done in a trap.
참고 : 일반적인 경우, 나는 read -t 1 var
stdin을 소비하고 stdin이 터미널이나 파이프가 아닌 경우 작동하지 않기 때문에 fifo없이 간단히 사용할 수 없습니다 .
하위 프로세스와 더 우아한 방식으로 바쁜 대기를 피할 수 있습니까?
true
. 질문이 업데이트되었습니다.
read -t 1 var
.
sleep
첫 번째 예에서 와 같이 진행하는 것이 좋습니다 . 두 번째는 작동하지만 미래에 누구나 쉽게 조정할 수는 없습니다. 간단한 코드도 안전 할 가능성 이 더 큽니다 .
true
내장이며 bash에서 하위 프로세스를 작성하지 않습니다. 바쁜 대기는 항상 나쁠 것입니다.