sair do ssh e ainda ter um comando em execução?

sair do ssh e ainda ter um comando em execução?

Estou executando um comando em um servidor. Ele vem com esta bibliotecahttp://www.graphicsmagick.org/.

Basicamente eu tenho um loop for que processa imagens em vários arquivos.

O comando é executado por horas e será executado por horas. Estou me perguntando: posso sair do ssh e ainda ter esses comandos em execução na máquina remota? Sair do ssh envia algum sinal para encerrar a execução do comando atual?

A outra coisa que notei... Embora eu esteja executando o comando remotamente, meu laptop está superaquecendo. O monitor de atividades mostra que o bash está usando 70% da CPU. estou no macbook pro

Agora isso é estranho. Como o comando remoto pode causar tensão na máquina local?

Responder1

Uma solução é prefixar o comando com nohup. Isto diz ao computador para ignorar sinais de 'desligamento' (como sair de uma sessão ssh). Isso PODE NÃO FUNCIONAR com forloops.

Outra boa solução (e minha maneira favorita de fazer isso) é instalar o pacote 'screen'. screenfornece um terminal virtual que pode ser desconectado, deixando os processos em execução pressionando CTRL + A , D. A tela pode então ser reconectada posteriormente com screen -r.

Responder2

Quando um líder de sessão com terminal de controle associado ( bash, no seu caso) sai, o sistema operacional envia SIGHUP para todos os processos no grupo de processos em primeiro plano (trabalho em primeiro plano). Além disso, bashenvia por padrão o SIGHUP para todos os seus jobs, em execução ou parados (jobs parados também são enviados SIGCONT). Agora a ação padrão ao receber o SIGHUP é o encerramento do processo.

Existem então várias abordagens para permitir que o processo seja executado após bashas saídas. Primeiro, você pode tornar seu processo imune ao SIGHUP; isso é o que o nohupcomando faz. Segundo, você pode colocar em segundo plano o grupo de processos correspondente e instruir bashpara não enviar SIGHUP para ele; é disownpara isso que o shell interno é usado (observe também que existe uma huponexitopção de shell, que faz com que o SIGHUP seja enviado para todos os trabalhos quando um shell de login interativo é encerrado).

Se desejar reconectar um terminal ao grupo de processos depois de efetuar login novamente, você pode usar um wrapper capaz de fazer isso; multiplexadores de terminal como esses screenpossuem essa funcionalidade.

informação relacionada