Aqui vai você. testado e funcionando.
while [ 1 ] ; do
ps 1001 > /dev/null || { shutdown -h now ; break ; }
sleep 1
done
Estou baixando algum software; Eu posso ver o pid
do processo de download com top
. Digamos que seja 1001
.
Como posso fazer com que meu computador seja desligado após o processo 1001
sair?
Aqui vai você. testado e funcionando.
while [ 1 ] ; do
ps 1001 > /dev/null || { shutdown -h now ; break ; }
sleep 1
done
Este laço de uma linha verifica a saída ps para o ID do processo 1001, dorme por 2 segundos e então verifica novamente até que não o encontre (o processo foi encerrado), ponto em que o loop termina e passa para o próximo comando que é um desligamento.
while [[ $(ps 1001 &> /dev/null)$? -eq 0 ]]; do sleep 2 ;done && shutdown -h now
Se você quer ter certeza de que o processo 1001 é o processo que você acha que é, você pode adicionar o grep para testar, por exemplo, se o processo for o iTunes, você poderia fazer:
while [[ $(ps 1001 |grep -q "iTunes" &> /dev/null)$? -eq 0 ]]; do sleep 2 ;done && shutdown -h now
Execute os seguintes comandos:
while kill -0 1001 &> /dev/null;
do
sleep .1
done;
poweroff
O uso de kill -0
não envia nenhum sinal real, mas reportará true enquanto um determinado processo estiver em execução. O redirecionamento &>
vai para /dev/null
(bit-bucket), portanto, quaisquer erros ou mensagens de sucesso não são incluídos na saída do programa. Isso durará um décimo de segundo e verificará o processo até que ele não esteja mais em execução, então executará um poweroff
.
Tags command-line process shutdown exit