如何通过SSH将SIGINT(Ctrl-C)发送到当前远程进程(不带-t选项)

Man*_*idt 4 linux ssh bash

我需要向SSH会话中在前台运行的远程进程发送SIGINT。

SSH会话已经建立,所以我不能使用启动它的选项(如如何通过SSH将SIGINT发送到远程进程中所述)。

ssh -t user@host
Run Code Online (Sandbox Code Playgroud)

我知道我可以打开第二个ssh会话并终止进程或关闭当前的ssh会话,但是我想避免这种情况并直接抛出当前的会话(如果可能的话)。

Ken*_*ter 6

如果您使用ssh在远程系统上启动没有PTY的进程,那么据我所知,无法通过该ssh会话向远程进程发出信号。

SSH协议具有一条消息,用于向远程进程发送信号。但是,您可能将OpenSSH用于客户端或服务器,或同时用于两者,并且OpenSSH不会实现信号消息。因此,OpenSSH客户端无法发送消息,并且OpenSSH服务器也不会对此进行操作。

有一个SSH扩展发送“中断”的消息,其通过OpenSSH的支持。在交互式会话中,OpenSSH客户端具有转义序列,您可以键入该转义序列以向服务器发送中断。OpenSSH服务器通过将中断发送给远程会话的PTY来处理中断消息,而Unix PTY通常会将中断视为SIGINT。但是,中断从根本上讲是TTY的概念,对于没有PTY的远程会话,这都不起作用。

  • 热门新闻:有一个错误报告向 OpenSSH 添加“信号”消息支持,根据报告(我尚未验证),OpenSSH 7.9(2018 年 10 月发布)及以后支持接收信号(尽管不是从客户端发送) ,这可能需要额外的实现) https://bugzilla.mindrot.org/show_bug.cgi?id=1424 (2认同)