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 .