我想检查正在监听的主进程ssh.sock
是否仍然存在。目前我正在检查返回的退出代码是否ssh -S ssh.sock -O check <my-server>
为零,但我不确定这是否是处理此问题的正确方法,并且我找不到任何文档。 master进程应该有ServerAliveInterval=20
,这样如果连接失败它就会死掉。是否存在返回码非零但进程本身仍处于活动状态的情况?
答案1
最简单的尝试方法是启动进程(ssh -MS ssh.sock <my-server>
),删除套接字并尝试它的行为方式。与工作连接:
$ ssh -S ssh.sock -O check <my-server>
Master running (pid=24314)
$ echo $?
0
当没有套接字时,你会得到这样的结果:
$ ssh -S ssh.sock -O check <my-server>
Control socket connect(ssh.sock): No such file or directory
$echo $?
255
我相信处理返回码是正确的方法。
是否存在返回码非零但进程本身仍处于活动状态的情况?
与前面的示例一样,当套接字因某种原因被删除时,您的连接仍处于活动状态,但您无法从“外部”检查它,也无法将新会话连接到它。