16

親からSIGINTを受信することを期待しているリモートマシンで実行されているプログラムがあります。そのプログラムが正しく機能するには、その信号を受信する必要があります。残念ながら、そのプロセスをSSH経由でリモートで実行し、SIGINTを送信すると、sshプロセス自体がシグナルを転送するのではなく、トラップして割り込みます。

GDBを使用したこの動作の例を次に示します。

ローカルで実行:

$ gdb
GNU gdb 6.3.50-20050815(Appleバージョンgdb-1344)(Fri Jul 3 01:19:56 UTC 2009)
..。
このGDBは「x86_64-apple-darwin」として構成されました。
^ C
(gdb)終了
^ C
(gdb)終了
^ C
(gdb)終了

リモートで実行する:

$ ssh foo.bar.com gdb
GNU gdb Red Hat 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 SIGINTgdbプロンプトで試してください。

于 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 に答える