Sua aparente pergunta: testando a existência de um processo com um determinado PID
ps -p $pid
é POSIX e deve funcionar em qualquer unix moderno não incorporado (não antiguidades ou Minix ou BusyBox ).
Uma maneira simples e portátil de testar se existe um processo por um determinado PID é kill -0 $pid
. Isso só funciona se você puder enviar um sinal para o processo (o sinal 0 se comporta como um sinal que é sempre entregue, mas não tem efeito), significando que kill
está sendo executado sob o UID efetivo do processo ou como raiz. Se kill
estiver sendo executado como um usuário diferente, você poderá testar se ele sinaliza “nenhum tal processo” (ESRCH) ou “operação não permitida” (EPERM), mas a partir do shell isso requer saber como sua implementação formatará a mensagem de erro .
Seu design subjacente: testar se um processo foi concluído
O projeto proposto tem uma grande falha: como você sabe se esse PID é o processo bunzip pelo qual você estava esperando? Talvez bunzip tenha terminado e agora há outro processo com seu antigo PID. O único lugar em que você pode esperar com segurança na finalização de um processo está em seu pai.
Uma abordagem melhor seria acionar a existência do arquivo descompactado e a inexistência do arquivo compactado ou verificar se o arquivo descompactado não está aberto por nenhum processo (com lsof
).