我开始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
,进程的 pid 似乎为XXXX + 1
。
这意味着它ssh -S socket
在后台启动,生成一个子进程然后退出。
在这种情况下我们如何捕获最后一个 pid?
答案1
是的,如果您使用switch ssh
, 会生成多路复用器进程。没有简单的方法可以直接在 中请求该 PID ,但假设您没有生成许多进程,您可以使用 的输出来获取 PID,例如ControlMaster
-S
ssh
ps
ps f | grep "ssh -S mysocket" | cut -d " " -f 1
答案2
这个命令会给你 master 的 pid:
ssh -S mysocket -O check example.com
您还可以使用:
pgrep --full --exact "ssh -S mysocket example.com -N -L 1234:localhost:1234"