Por que meu processo remoto ainda é executado depois de matar uma sessão ssh?

15

Estou seguindo um arquivo de log remoto executando este comando em um shell local:

ssh remotemachine tail -100f /path/to/error_file

Quando eu ctrl-c fora deste comando, parece que o ctrl-c mata o processo ssh local e deixa minha cauda em execução na máquina remota. Fiquei com a impressão de que romper a conexão enviaria um sinal de desligamento (já que não estou usando nohup) e mataria o processo, mas esse claramente não é o caso.

Alguém pode lançar mais alguma luz quando os sinais de desligamento são enviados e quando eles não são? A máquina remota é o Ubuntu, e meu shell local é o bash do OS X, se algum deles fizer diferença.

    
por Ryan Olson 10.08.2009 / 18:04

1 resposta

13

Esse comportamento decorre da falta de um terminal de controle para o processo em execução. Quando o processo remoto não tem um terminal de controle, o processo ssh remoto que manipula sua sessão é incapaz de matar o comando, que é deixado pendurado em um estado zumbi para eventualmente ser limpo pelo init.

Você pode contornar isso executando-a com uma opção -t, que lhe dá um terminal de controle. Isto fará com que o processo termine quando você ctrl-c seu comando ssh remotamente.

A opção -t :

Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

Dê uma olhada em man ssh e man sshd ao usar essa opção, pois há outras implicações de ter um terminal de controle, por exemplo, a capacidade de enviar caracteres de escape.

    
por 10.08.2009 / 19:02

Tags