2009-10-02 4 views
13

У меня есть программа, работающая на удаленной машине, которая рассчитывает получить SIGINT от родителя. Эта программа должна получить этот сигнал для правильной работы. К сожалению, если я запускаю этот процесс удаленно через SSH и отправляю SIGINT, сам процесс ssh ловушки и прерывания, а не пересылка сигнала.Как отправить SIGINT на удаленный процесс через SSH?

Вот пример такого поведения с помощью 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

0

Можете ли вы запустить терминал на удаленной машине и использовать kill -INT, чтобы отправить сигнал?

1

Попробуйте signal SIGINT в командной строке gdb.

+0

В моем случае удаленная программа не GDB - Я просто использую этот пример, чтобы проиллюстрировать поведение. Извините, что было неясно. (Фактический удаленный процесс - это сервер, играющий в шахматы по стандарту IO.) Спасибо. – Matt

1

Похоже, вы делаете ctrl + c. Проблема заключается в том, что ваше окно терминала отправляет SIGINT в процесс ssh, выполняемый локально, а не в процесс на удаленной системе.

Вам нужно будет указать сигнал вручную, используя команду или системный вызов kill в удаленной системе.

или более удобно, используя killall

$killall -INT gdb 
+1

К сожалению, поведение одинаково: пишу ли я^C на терминал или отправляю SIGINT в процесс ssh с помощью kill. – Matt

+1

Вы должны отправить SIGINT в процесс, который вы хотите получить, а не в свою сессию ssh. –