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

スリープモードが終了するのを待つもう1つの方法は、次のwaitコマンドを使用することです。

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

wait $pid $pid_sleep
echo "commands finished"

おすすめ記事