我启动ssh -S mysocket example.com来连接example.com 。 如果我的连接挂起,我需要kill这个过程:
ssh -S mysocket example.com -N -L 1234:localhost:1234 & last_pid=$! ...(do something blocker) kill $last_pid
但是这不起作用。 如果last_pid是XXXX ,那么当我用ps -ef | grep ssh检查实际进程时 ps -ef | grep ssh ,进程'PID似乎XXXX + 1 。
这意味着ssh -S socket在后台启动,产生一个subprocess并退出。
在这种情况下,我们如何捕获最后一个pid?
是的,如果您使用-S开关, ssh将产生ControlMaster多路复用器进程。 如何直接询问PID的ssh没有简单的方法,但假设你没有产生许多进程,你可以使用ps的输出来获得PID,例如
ps f | grep "ssh -S mysocket" | cut -d " " -f 1