2009-10-02 18 views
13

Uzak makinede ana bilgisayardan SIGINT almayı bekleyen bir programım var. Bu programın doğru çalışması için bu sinyali alması gerekiyor. Maalesef, bu işlemi SSH üzerinden uzaktan çalıştırırsam ve SIGINT gönderirseniz, ssh işlemi, sinyali iletmekten ziyade kendisini yakalar ve keser.SIGINT SSH üzerinden uzak bir işleme nasıl gönderilir?

lokal Koşu:

 
$ 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 

uzaktan çalıştırma:

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

kimse bu soruna bir çözüm yolu önerebilir

İşte GDB kullanarak bu davranışa bir örnek? Yerel ssh istemcisi OpenSSH_5.2p1'dir.

cevap

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

Mükemmel. Bu kadar. Teşekkürler. – Matt

0

Uzak makinede bir terminal çalıştırabilir ve ona sinyal göndermek için kill -INT kullanabilir misiniz?

1

gdb isteminde signal SIGINT'u deneyin.

+0

kullanarak - Sadece davranışı göstermek için bu örnek kullanıyorum. Üzgünüm, açık değildi. (Gerçek uzak işlem standart IO üzerinden satranç oynayan bir sunucudur.) Teşekkürler. – Matt

1

Ctrl + c yapıyorsunuz gibi görünüyor. Sorun, terminal pencerenizin SIGINT'i uzak sistemdeki işlemlere değil, yerel olarak çalışan ssh işlemine göndermesidir.

Uzak sistemde kill komutunu veya sistem çağrısı kullanarak el ile bir sinyal belirtmeniz gerekir.

veya daha elverişli benim durumumda uzak programı GDB değil ise killall

$killall -INT gdb 
+1

Ne yazık ki, davranışı terminale bir^C yazsam da aynıdır ya da SIGINT'i kill kullanarak ssh işlemine gönderirim. – Matt

+1

SIGINT'i, ssh oturumunuzu değil, almak istediğiniz sürece göndermeniz gerekir. –

İlgili konular