Recuperar informações do processo do comando nohup

3

Eu uso o comando nohup para executar scripts de shell da seguinte forma:

nohup ./run.sh &

Minha pergunta é: depois de sair do terminal e voltar mais tarde, como posso recuperar as informações sobre esse processo se ele estiver concluído ou ainda em execução?

    
por Alli 19.06.2018 / 20:16

2 respostas

1

Em geral, você pode examinar a saída de ps x . Existe run.sh ou não. Se houver, pode ser o processo que você procura ou algum outro run.sh . Outras investigações podem ser necessárias.

Existe, no entanto, esse truque. Nota nohup imprime uma mensagem como esta:

 nohup: ignoring input and appending output to /home/alli/nohup.out

Agora invoque:

lsof /home/alli/nohup.out

Se o run.sh invocado com nohup ainda estiver em execução, ele deverá aparecer na saída de lsof (duas vezes, porque nohup redireciona o descritor de arquivo 1 e 2 para nohup.out ). Se você usou nohup mais de uma vez, lsof deve retornar vários processos. Se você usou nohup mais de uma vez com o mesmo executável, pode ser necessário verificar /proc/$pid/ ( exemplo ) para diferenciá-los.

Eu usaria tmux em primeiro lugar. Na verdade, eu uso isso diariamente.

    
por 19.06.2018 / 21:38
1

Você pode armazenar o valor do processo nohup ped em um arquivo usando $! logo após iniciar o processo com

nohup the_process &

Então, quando você voltar, leia o PID e verifique se o processo está sendo executado. Se sim, verifique se é o tipo de processo desejado. (O PID pode ter sido redesignado para outro processo).

Se isso não interromper o funcionamento do processo, você também poderá passar ao processo um argumento falso que funcionará como uma dica para você quando ler a saída de ps . Por exemplo:

$ cat p.bash 
#!/bin/bash
sleep 10
$ nohup ./p.bash some_id_hint &
[1] 14139
nohup: ignoring input and appending output to 'nohup.out'
$ echo $!
14139
$ ps 14139
  PID TTY      STAT   TIME COMMAND
14139 pts/1    S      0:00 /bin/bash ./p.bash some_id_hint
    
por 19.06.2018 / 21:54