2009-10-02 6 views
13

Ich habe ein Programm läuft auf einem Remote-Rechner, der erwartet, dass SIGINT von den Eltern erhalten. Dieses Programm muss dieses Signal empfangen, damit es korrekt funktioniert. Leider, wenn ich diesen Prozess remote über SSH führe und SIGINT sende, fängt der ssh-Prozess selbst ab und unterbricht statt das Signal weiterzuleiten.Wie wird SIGINT über SSH an einen Remote-Prozess gesendet?

Hier ist ein Beispiel für dieses Verhalten GDB mit:

lokal Laufen:

 
$ 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 

Lauf der Ferne:

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

Kann jemand empfehlen, einen Weg, um dieses Problem zu arbeiten? Der lokale ssh-Client ist OpenSSH_5.2p1.

Antwort

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

Perfekt. Das ist es. Danke. – Matt

0

Können Sie ein Terminal auf dem Remote-Computer ausführen und kill -INT verwenden, um das Signal zu senden?

1

Versuchen Sie signal SIGINT bei der Eingabeaufforderung gdb.

+0

In meinem Fall mit dem Remote-Programm ist nicht GDB - Ich verwende nur dieses Beispiel, das Verhalten zu veranschaulichen. Entschuldigung, das war nicht klar. (Der eigentliche Remote-Prozess ist ein Server, der über Standard-IO Schach spielt.) Danke. – Matt

1

Es sieht so aus, als ob du Strg + C machst. Das Problem besteht darin, dass Ihr Terminalfenster SIGINT an den lokal ausgeführten ssh-Prozess und nicht an den Prozess auf dem fernen System sendet.

Sie müssen ein Signal manuell mit dem kill Befehl oder Systemaufruf auf dem Remote-System angeben.

oder bequeme killall

$killall -INT gdb 
+1

Leider ist das Verhalten das gleiche, ob ich ein^C an das Terminal schreibe oder ich SIGINT an den ssh-Prozess mit kill sende. – Matt

+1

Sie müssen SIGINT an den Prozess senden, den Sie erhalten möchten, nicht an Ihre SSH-Sitzung. –