Как отправить SIGINT удаленному процессу через SSH? - PullRequest
14 голосов
/ 03 октября 2009

У меня есть программа, работающая на удаленной машине, которая ожидает получения 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.

Ответы [ 4 ]

22 голосов
/ 03 октября 2009
$ ssh <strong>-t</strong> foo.bar.com gdb
...
(gdb) ^C
Quit
1 голос
/ 03 октября 2009

Попробуйте signal SIGINT в приглашении GDB.

1 голос
/ 03 октября 2009

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

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

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

$killall -INT gdb
0 голосов
/ 03 октября 2009

Можете ли вы запустить терминал на удаленном компьютере и использовать kill -INT для отправки ему сигнала?

...