Regularmente, esqueço-me de adicionar algo && shutdown -h now
a um processo de longa duração. Existe alguma maneira de adicionar um shutdown -h now
comandodepoiso primeiro comando foi invocado? Não se destina a interromper o processo em andamento. Talvez seja possível assistir o PID?
Responder1
Não há necessidade de executar ps repetidamente para listar todos os processos e executar o grep na saída. Faça o processo em segundo plano com ctrl-Z e execute
bg %1 ; wait %1 ; shutdown -h now
Se você tiver outros trabalhos em segundo plano em execução, receberá um jobspec diferente em vez de [1] ao pressionar Ctrl-Z. Se sim, use isso.
Responder2
Eu faço isso toda hora.
- Inicie o processo.
- Perceba que esqueci de fazer meu
&&
comando. - Pressione Ctrl+ Zpara suspender o processo e retornar ao shell.
- Corra
fg && shutdown -h now
para:- Primeiro plano e retome o processo que você acabou de suspender.
- Então, depois de terminar, ele executará o que você queria.
Alternativamente, você pode pesquisar conforme sugerido em outras respostas como esta:
while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
Responder3
Você poderia fazer algo assim, que verificará se o processo está sendo executado a cada 5 segundos e tomará as medidas apropriadas:
while true; do
if ps -ef | grep -q '[l]ong-running-process'; then
sleep 5
else
sudo poweroff
fi
done
Observe os colchetes na grep
expressão. Isso é para garantir que o grep
processo não seja correspondido se acabar na ps
lista. Cercar qualquer caractere único entre colchetes é suficiente.
Responder4
Faça um script de shell para executar ambos os processos:
MeuShellScript.txt:
#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now
Depois de salvar isso no diretório onde você inicia o processo fornecido, faça:
chmod +x MyShellScript.txt
Então, quando você quiser executar o comando, basta digitar ./MyShellScript.txt
e ele fará as duas coisas para você.