2009-10-02 47 views
13

我有一個程序運行在遠程計算機上,希望從父接收到SIGINT。該程序需要接收該信號才能正常工作。不幸的是,如果我通過SSH遠程運行該進程併發送SIGINT,則ssh進程本身會陷入並中斷而不是轉發信號。如何通過SSH將SIGINT發送到遠程進程?

下面是使用GDB此行爲的示例:

本地運行:

 
$ 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 

遠程運行:

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

任何人可以提出解決這個問題的一種工作方式?本地ssh客戶端是OpenSSH_5.2p1。

回答

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

完美。而已。 謝謝。 – Matt 2009-10-03 19:18:41

0

您可以在遠程計算機上運行終端並使用kill -INT向其發送信號嗎?

1

在gdb提示符下嘗試signal SIGINT

+0

在我的情況下,遠程程序不GDB更方便 - 我只是使用例子來說明這個問題。對不起,不清楚。 (實際的遠程過程是一個服務器在標準IO上下象棋。) 謝謝。 – Matt 2009-10-02 22:44:52

1

它看起來像你在做ctrl + c。問題是您的終端窗口正在向本地運行的ssh進程發送SIGINT,而不是在遠程系統上進行。

您必須在遠程系統上使用kill命令或系統調用手動指定信號。

或使用killall

$killall -INT gdb 
+1

不幸的是,無論我向終端寫入^ C還是使用kill將SIGINT發送到ssh進程,行爲都是相同的。 – Matt 2009-10-02 22:53:55

+1

您必須將SIGINT發送到您想要接收的進程,而不是您的ssh會話。 – 2009-10-02 23:00:49

相關問題