Mar*_*iae 27
不,正确的杀死autossh方法就是杀死进程autossh,没有别的。
原因是
# file $(which autossh)
/usr/bin/autossh: POSIX shell script, ASCII text executable
Run Code Online (Sandbox Code Playgroud)
那autossh只是一个shell脚本,而不是一个服务。它开始一个新程序,在它的最后一行,
exec /usr/lib/autossh/autossh "$@"
Run Code Online (Sandbox Code Playgroud)
又不是服务。至于exec(您可以在 Bash 黑客的wiki 中仔细检查它),它是一个 shell 内置命令,它用以下命令(/usr/lib/autossh/autossh "$@"在本例中)替换当前 shell,而无需启动新进程。因此,停止的唯一方法autossh是杀死调用脚本,例如
pkill -3 autossh
Run Code Online (Sandbox Code Playgroud)
(感谢dviljoen指出使用-3标志的重要性,见下文)。顺便说一下,终止ssh连接是行不通的,因为调用命令(即上面的命令)会在意识到旧连接已被删除后立即启动一个新连接。
使用以下命令运行自动 ssh:
AUTOSSH_PIDFILE=/var/run/tunnel.pid autossh
杀死它:
kill pid
顺便提一句
pkill -9 autossh 是错误的
-9确保进程没有正常退出,所以ssh当autossh进程被杀死时进程仍然存在
没有-9仍然很糟糕,如果您有多个隧道在运行,pkill则会将它们全部杀死
正确的方法是设置AUTOSSH_PIDFILEenv var 然后kill只设置pid
| 归档时间: |
|
| 查看次数: |
19521 次 |
| 最近记录: |