当最后一个进程产生子进程并退出时,如何获取最后一个 PID?

当最后一个进程产生子进程并退出时,如何获取最后一个 PID?

我开始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_pidXXXX,当我用检查实际进程时ps -ef | grep ssh,进程的 pid 似乎为XXXX + 1

这意味着它ssh -S socket在后台启动,生成一个子进程然后退出。

在这种情况下我们如何捕获最后一个 pid?

答案1

是的,如果您使用switch ssh, 会生成多路复用器进程。没有简单的方法可以直接在 中请求该 PID ,但假设您没有生成许多进程,您可以使用 的输出来获取 PID,例如ControlMaster-Ssshps

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"

相关内容