A maneira mais fácil de tentar é iniciar o processo ( ssh -MS ssh.sock <my-server>
), remover o soquete e tentar como ele se comportará. Com conexão de trabalho:
$ ssh -S ssh.sock -O check <my-server>
Master running (pid=24314)
$ echo $?
0
Quando não há soquete, você terá algo assim:
$ ssh -S ssh.sock -O check <my-server>
Control socket connect(ssh.sock): No such file or directory
$echo $?
255
Eu acredito que manipular o código de retorno é o caminho correto.
Is there any case in which the return code would be non-zero, but the process itself would be alive?
Como no exemplo anterior, quando o soquete é removido por algum motivo, sua conexão está ativa, mas você não pode verificá-la de "fora" e não pode conectar novas sessões a ela.