Как отправить 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.

Ответы

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

$killall -INT gdb

Ответ 4

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