Como posso adicionar a um processo já em execução um comando adicional de 'desligamento'?

Como posso adicionar a um processo já em execução um comando adicional de 'desligamento'?

Regularmente, esqueço-me de adicionar algo && shutdown -h nowa um processo de longa duração. Existe alguma maneira de adicionar um shutdown -h nowcomandodepoiso 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.

  1. Inicie o processo.
  2. Perceba que esqueci de fazer meu &&comando.
  3. Pressione Ctrl+ Zpara suspender o processo e retornar ao shell.
  4. Corra fg && shutdown -h nowpara:
    1. Primeiro plano e retome o processo que você acabou de suspender.
    2. 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 grepexpressão. Isso é para garantir que o grepprocesso não seja correspondido se acabar na pslista. 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.txte ele fará as duas coisas para você.

informação relacionada