ssh:将信号传播到远程进程

ssh:将信号传播到远程进程

这是通用版本:向 ssh 内部运行的进程发送 SIGTERM 信号

如果进程获得 pty (-tt),则可以向远程进程发送 Ctrl-C:

# Runs for 5 seconds
(sleep 5; echo '^C'; sleep 5) | time ssh -tt localhost burnP6

我曾希望 Ctrl-Z 也能有同样的效果,但是,可惜不行:

# Continues to run - does not suspend
(sleep 5; echo '^Z'; sleep 5) | time ssh -tt localhost burnP6

如果我进入交互式会话,Ctrl-C 和 Ctrl-Z 可以正常工作。

有没有办法我可以发送其他信号(我对 Ctrl-Z 特别感兴趣)?

我无法使用建议的“ssh hostname 'kill -TERM $pid'”,因为我不知道远程系统上的 pid。

答案1

你真的需要一个 tty 吗?

您可以使用的ssh server killall burnP6是只有一个具有该名称的进程。

或者您可以以某种方式将进程的 IP 写入文件中,然后使用类似“ssh server kill $(cat /tmp/burnP6.pid)”之类的命令。

或者更简单、更强大的实现是使用包守护进程,用于守护非守护进程的程序。它允许您自动将守护进程的 PID 写入文件并轻松终止它。它甚至可以在您的进程终止时重新启动它。

启动方法:

ssh server daemon -n burnP6 -- /usr/bin/burnP6

要停止它:

ssh server daemon --stop -n burnP6 

相关内容