nohup nice job abortado quando desconectado

0

Aprendi que o comando nohup permite que o comando continue em execução se você perder sua conexão ou precisar fazer logout. Estou executando nohup nice my command & no remoter por meio do ssh, e depois que meu laptop perdeu sua conexão de rede, o terminal diz "pipe quebrado" e sai automaticamente. Quando me reconectei, o trabalho está faltando. Por que é assim? É possível executá-lo de onde parou?

    
por Fangting Xu 11.02.2016 / 21:56

1 resposta

2

Há algumas coisas para entender aqui:

  1. nohup não necessariamente evita que o programa perca a conexão. O que ele faz é mascarar o sinal HUP , que é o que o SO irá enviar (na verdade, o shell de controle) quando você fizer logoff. Se o seu programa ainda tiver descritores de arquivos conectados ao terminal, ele será parado e possivelmente será cancelado. Para evitar que isso aconteça, nohup normalmente redireciona stdout e stderr para nohup.out e fecha stdin. Mas se o seu programa pode tentar abrir descritores de arquivos para o terminal de qualquer maneira.

  2. O shell não controla "jobs" em invocações / sessões. Não há como anexar novamente um trabalho a um shell que foi encerrado. Existem vários problemas:

    1. Use um emulador de terminal, como screen ou tmux , que pode ser reconectado a um terminal diferente. Aqui, você não precisa executar o seu trabalho em segundo plano; basta executá-lo em primeiro plano e desanexar ( Ctrl-A d with screen ).

    2. Acompanhe o PID do trabalho que foi iniciado. Você pode obter essas informações com o comando jobs -l depois de iniciado. Quando você deseja que o novo shell aguarde o trabalho e conhece o pid do trabalho, você pode emitir o comando:

      wait <pid>
      

Mas a saída ainda será enviada para nohup.out , e seu único indício é que você verá um prompt de comando novamente.

    
por 11.02.2016 / 22:11

Tags