Um trabalho colocado em segundo plano continuará em execução depois que uma sessão SSH for fechada?

7

Eu tenho uma instância da AWS e algumas tarefas que preciso concluir levarão algum tempo.

Se eu rodá-los antes de ir para o trabalho (por exemplo, wget <someStuff> ), então confirme para o Ctrl » bg para verificar se inicia corretamente ), depois saia da minha sessão SSH, o comando wget continuará em segundo plano?

Ou isso termina com o fechamento da minha sessão?

    
por MHibbin 13.09.2012 / 17:45

2 respostas

10

Colocá-lo em segundo plano não fará com que ele fique em segundo plano depois que você sair da sessão ssh.

Em segundo plano, apenas desanexa o pipe stdin do console. O processo ainda é uma criança do processo shell, por ex. %código%. O procedimento padrão no Linux / UNIX é que terminar um processo de shell pai faz com que todos os processos filhos recebam um sinal bash . Quase todos os processos padrão processarão esse sinal como uma solicitação para encerrar o processo, embora um processo possa ignorar o sinal SIGHUP e continuar em execução. Ele também pode fazer algo completamente diferente, como ligar o micro-ondas ou fazer um rover na broca da lua, ou ligar o carro ou apagar todos os arquivos do sistema. É um sinal , o que significa que é apenas um tipo de comando consultivo enviado para o processo. O processo pode fazer o que quiser com isso.

Isso é o que você precisa entender: como processar SIGHUP equivale a dizer "encerre seu programa agora", algo pode facilmente ignorar essa "solicitação legal" e continuar em execução. Portanto, existem vários programas dedicados que são projetados especificamente para permitir que o processo continue sendo executado mesmo se o shell terminar. Quando a sua conexão SSH se desconecta, a propósito, o processo do shell termina como parte de sua sequência de logout.

GNU SIGHUP é um desses comandos; screen é outro. nohup é mais flexível em geral e muito útil para essa tarefa específica. screen não é adequado porque o processo filho irá "honrar" SIGHUP se não estiver envolvido em um processo projetado para ignorar SIGHUP, como bg . screen é o processo mais básico de ignorar o SIGHUP, já que é basicamente sua única funcionalidade, além de gravar a saída do processo filho em um arquivo.

Veja também essa pergunta, que é basicamente uma cópia exata, mas em ServerFault .

    
por 13.09.2012 / 17:50
3

Em particular, o Wget continuará automaticamente em segundo plano se você fechar a sessão do SSH, sem precisar fazer mais ações. Ele até cria um arquivo wget-log , como se você o tivesse iniciado com a opção -b .

Em geral, os programas parados ou em segundo plano sairão quando você fechar a sessão SSH.

    
por 13.09.2012 / 17:54

Tags