2009-10-02 19 views
13

Tengo un programa ejecutándose en una máquina remota que espera recibir SIGINT del padre. Ese programa necesita recibir esa señal para funcionar correctamente. Lamentablemente, si ejecuto ese proceso de forma remota a través de SSH y envío de SIGINT, el proceso ssh atrapa e interrumpe en lugar de reenviar la señal.¿Cómo enviar SIGINT a un proceso remoto a través de SSH?

He aquí un ejemplo de este comportamiento usando GDB:

se ejecutan localmente:

 
$ gdb 
GNU gdb 6.3.50-20050815 (Apple version gdb-1344) (Fri Jul 3 01:19:56 UTC 2009) 
... 
This GDB was configured as "x86_64-apple-darwin". 
^C 
(gdb) Quit 
^C 
(gdb) Quit 
^C 
(gdb) Quit 

Ejecución remota:

 
$ ssh foo.bar.com gdb 
GNU gdb Red Hat Linux (6.3.0.0-1.159.el4rh) 
... 
This GDB was configured as "i386-redhat-linux-gnu". 
(gdb) ^C 
Killed by signal 2. 
$ 

¿Puede alguien sugerir una manera de trabajar alrededor de este problema? El cliente ssh local es OpenSSH_5.2p1.

Respuesta

21
 
$ ssh -t foo.bar.com gdb 
... 
(gdb) ^C 
Quit 
+1

Perfecto. Eso es. Gracias. – Matt

0

¿Se puede ejecutar un terminal en la máquina remota y usar kill -INT para enviar la señal?

1

Pruebe signal SIGINT en el indicador gdb.

+0

En mi caso, el programa a distancia no es BGF - Sólo estoy usando ese ejemplo para ilustrar el comportamiento. Lo siento, no estaba claro. (El proceso remoto real es un servidor que juega al ajedrez sobre el IO estándar.) Gracias. – Matt

1

Parece que estás haciendo ctrl + c. El problema es que su ventana de terminal está enviando SIGINT al proceso ssh que se ejecuta localmente, no al proceso en el sistema remoto.

Deberá especificar una señal manualmente utilizando el comando kill o la llamada al sistema en el sistema remoto.

o más convenientemente usando killall

$killall -INT gdb 
+1

Desafortunadamente, el comportamiento es el mismo si escribo una^C en la terminal o si envío SIGINT al proceso ssh usando kill. – Matt

+1

Debe enviar SIGINT al proceso que desea recibir, no a su sesión ssh. –

Cuestiones relacionadas