Ответ 1
$ ssh -t foo.bar.com gdb ... (gdb) ^C Quit
У меня есть программа, работающая на удаленной машине, которая рассчитывает получить 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.
$ ssh -t foo.bar.com gdb ... (gdb) ^C Quit
Попробуйте signal SIGINT
в командной строке gdb.
Похоже, вы делаете ctrl + c. Проблема заключается в том, что ваше окно терминала отправляет SIGINT в процесс ssh, выполняемый локально, а не в процесс на удаленной системе.
Вам нужно будет указать сигнал вручную, используя команду kill
или системный вызов в удаленной системе.
или более удобно, используя killall
$killall -INT gdb
Можно ли запустить терминал на удаленном компьютере и использовать kill -INT
для отправки сигнала?