16

我有一个在远程机器上运行的程序,它希望从父级接收 SIGINT。该程序需要接收该信号才能正常运行。不幸的是,如果我通过 SSH 远程运行该进程并发送 SIGINT,则 ssh 进程本身会捕获和中断而不是转发信号。

以下是使用 GDB 的此行为示例:

本地运行:

$gdb
GNU gdb 6.3.50-20050815(Apple 版本 gdb-1344)(2009 年 7 月 3 日星期五 01:19:56 UTC)
...
此 GDB 配置为“x86_64-apple-darwin”。
^C
(gdb) 退出
^C
(gdb) 退出
^C
(gdb) 退出

远程运行:

$ ssh foo.bar.com gdb
GNU gdb 红帽 Linux (6.3.0.0-1.159.el4rh)
...
这个 GDB 被配置为“i386-redhat-linux-gnu”。
(gdb) ^C
被信号2杀死。
$

任何人都可以提出解决这个问题的方法吗?本地 ssh 客户端是 OpenSSH_5.2p1。

4

4 回答 4

25
$ ssh -t foo.bar.com gdb
...
(gdb) ^C
退出
于 2009-10-03T05:09:38.983 回答
1

signal SIGINT在 gdb 提示符下尝试。

于 2009-10-02T22:40:51.153 回答
1

看起来你在做 ctrl+c。问题是您的终端窗口将 SIGINT 发送到本地运行的 ssh 进程,而不是远程系统上的进程。

您必须使用kill远程系统上的命令或系统调用手动指定信号。

或更方便地使用killall

$killall -INT gdb
于 2009-10-02T22:47:16.320 回答
0

你可以在远程机器上运行一个终端并使用kill -INT它来发送信号吗?

于 2009-10-02T22:40:41.873 回答