polling process por kill -0 freqüentemente

0

O script a seguir no Linux imprime "sleep 1 finished", mas em geral POSIX você não pode usar sleep 0.1 , já que o argumento tem que ser inteiro. Se eu deixar o comando fora, o script nunca sairá (por quê !?), mas terá muito poder de CPU. Se eu substituí-lo por ( : ) ele funciona no meu sistema, mas não tenho certeza, se será em geral, e até mesmo isso leva muita energia da CPU. Qual é a melhor solução 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
    
por jarno 01.08.2017 / 22:46

1 resposta

2

Uma alternativa para aguardar a saída do sono seria com o comando wait :

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

wait $pid $pid_sleep
echo "commands finished"
    
por 01.08.2017 / 23:13