kill -0을 통해 프로세스를 자주 폴링합니다.

kill -0을 통해 프로세스를 자주 폴링합니다.

Linux의 다음 스크립트는 "sleep 1 end"를 인쇄하지만 일반적으로 POSIX에서는 sleep 0.1인수가 정수여야 하므로 이를 사용할 수 없습니다. 이 명령을 무시하면 스크립트는 절대 종료되지 않지만(왜!?) CPU 리소스를 많이 소모합니다. 시스템을 교체하면 ( : )시스템에서 작동 하지만 일반적으로 작동하는지, 심지어 CPU 성능이 많이 필요한지 확실하지 않습니다. 더 나은 POSIX 솔루션은 무엇입니까?

#!/bin/sh

sleep 2 &
pid=$!
sleep 1 &
pid_sleep=$!
while kill -0 "$pid" 2>/dev/null; do
    kill -0 "$pid_sleep" 2>/dev/null || {
        echo sleep 1 finished
        exit 0
    }
    sleep 0.1
done

답변1

절전 모드가 종료될 때까지 기다리는 또 다른 방법은 다음 wait명령을 사용하는 것입니다.

sleep 2 &
pid=$!
sleep 1 &
pid_sleep=$!

wait $pid $pid_sleep
echo "commands finished"

관련 정보