2009-10-02 11 views
13

Ho un programma in esecuzione su una macchina remota che si aspetta di ricevere SIGINT dal genitore. Quel programma deve ricevere quel segnale per funzionare correttamente. Sfortunatamente, se eseguo il processo da remoto su SSH e invii SIGINT, il processo ssh stesso intercetta e interrompe piuttosto che inoltrare il segnale.Come inviare SIGINT a un processo remoto tramite SSH?

Ecco un esempio di questo comportamento usando GDB:

esecuzione a livello locale:

 
$ 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 

esecuzione da remoto:

 
$ 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. 
$ 

Qualcuno può suggerire un modo di lavorare intorno a questo problema? Il client ssh locale è OpenSSH_5.2p1.

risposta

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

Perfetto. Questo è tutto. Grazie. – Matt

0

È possibile eseguire un terminale sulla macchina remota e utilizzare kill -INT per inviare il segnale?

1

Provare signal SIGINT al prompt di gdb.

+0

Nel mio caso il programma remoto non è GDB - io sono solo utilizzando tale esempio per illustrare il comportamento. Scusa, non è stato chiaro. (Il processo remoto effettivo è un server che gioca a scacchi su IO standard.) Grazie. – Matt

1

Sembra che tu stia facendo ctrl + c. Il problema è che la finestra del terminale invia SIGINT al processo ssh in esecuzione localmente, non al processo sul sistema remoto.

È necessario specificare manualmente un segnale utilizzando il comando kill o la chiamata di sistema sul sistema remoto.

o più comodamente utilizzando killall

$killall -INT gdb 
+1

Sfortunatamente, il comportamento è lo stesso sia che scriva un^C al terminale o che invii SIGINT al processo ssh usando kill. – Matt

+1

È necessario inviare SIGINT al processo che si desidera ricevere, non alla sessione SSH. –

Problemi correlati