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

10

Regularmente esqueço de adicionar && shutdown -h now a um processo de longa duração. Existe alguma maneira de adicionar um comando shutdown -h now após o primeiro comando foi chamado? Não se destina a interromper o processo em andamento. Talvez seja possível assistir ao PID?

    
por brubaker 30.01.2012 / 02:53

5 respostas

11

Não há necessidade de executar repetidamente ps para listar todos os processos e grep através da saída. Contexto o processo com ctrl-Z, em seguida, execute

bg %1 ; wait %1 ; shutdown -h now

Se você tiver outras tarefas em segundo plano em execução, será atribuído um jobpec diferente em vez de [1] quando você ctrl-z. Em caso afirmativo, use isso em seu lugar.

    
por psusi 30.01.2012 / 04:03
3

Você poderia fazer algo assim, o que verificará se o processo está sendo executado a cada 5 segundos e tomará as medidas adequadas:

while true; do
  if ps -ef | grep -q '[l]ong-running-process'; then
    sleep 5
  else
    sudo poweroff
  fi
done

Observe os colchetes na expressão grep . Isso é para garantir que o processo grep não seja correspondido se acabar na lista ps . Rodear qualquer caractere único com colchetes é suficiente.

    
por Scott Severance 30.01.2012 / 03:07
1

Eu faço isso o tempo todo.

  1. Inicie o processo.
  2. Perceba que esqueci de executar meu comando && .
  3. Pressione Ctrl + Z para suspender o processo e retornar ao shell.
  4. Executar fg && shutdown -h now para:
    1. Primeiro plano e retome o processo que você acabou de suspender.
    2. Então, depois que terminar, ele executará o que você queria executar.

Como alternativa, você pode pesquisar como sugerido em outras respostas como esta:

while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
    
por Naftuli Kay 30.01.2012 / 03:43
1

Se você conhece o pid, você pode executar isto:

while ps -p $PID; sleep 5; done; shutdown -h now

Para executar sem eco do ps, faça isso:

while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now

E, finalmente, para executá-lo em segundo plano sem nenhuma saída:

(while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now ) &

A solução de Scott é boa, mas isso elimina a necessidade de grep se você já conhece o pid. E é muito mais rápido digitar.: P

    
por Zoke 30.01.2012 / 03:29
0

Crie um script de shell para executar os dois processos:

MyShellScript.txt:

#!/bin/sh
MyProcessIdLikeToStart -o options && shutdown -h now

Depois de salvar isso no diretório onde você inicia o processo, faça um:

chmod +x MyShellScript.txt

Então, quando você quiser executar o comando, digite ./MyShellScript.txt e ele fará as duas coisas para você.

    
por Chris Curry 30.01.2012 / 03:10