2009-10-02 6 views
13

Mam program działający na zdalnym komputerze, który oczekuje otrzymania SIGINT od rodzica. Ten program musi odebrać ten sygnał, aby działał poprawnie. Niestety, jeśli uruchomię ten proces zdalnie przez SSH i wyślę SIGINT, sam proces ssh zatrzymuje i przerywa, a nie przekazuje sygnał.Jak wysłać SIGINT do zdalnego procesu przez SSH?

Oto przykład takiego zachowania przy użyciu GDB:

działa lokalnie:

 
$ 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 

Running zdalnie:

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

Czy ktoś może zaproponować sposób pracy wokół tego problemu? Lokalny klient ssh to OpenSSH_5.2p1.

Odpowiedz

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

Idealny. to jest to! Dzięki. – Matt

0

Czy można uruchomić terminal na zdalnym komputerze i użyć kill -INT, aby wysłać sygnał?

1

Wypróbuj signal SIGINT w wierszu polecenia gdb.

+0

w moim przypadku pilot program nie jest GDB - Ja tylko przy użyciu tego przykład ilustrujący zachowanie. Przepraszam, że nie było to jasne. (Rzeczywistym zdalnym procesem jest serwer grający w szachy nad standardowym IO.) Dzięki. – Matt

1

Wygląda na to, że robisz ctrl + c. Problem polega na tym, że twoje okno terminala wysyła SIGINT do procesu ssh działającego lokalnie, a nie do procesu w systemie zdalnym.

Musisz podać sygnał ręcznie za pomocą polecenia lub system połączenia kill na zdalnym systemie.

lub bardziej wygodnie za pomocą killall

$killall -INT gdb 
+1

Niestety, zachowanie jest takie samo, niezależnie od tego, czy piszę^C do terminala, czy wysyłam SIGINT do procesu ssh używając kill. – Matt

+1

Musisz wysłać SIGINT do procesu, który chcesz otrzymać, a nie do sesji ssh. –