Ssh

當最後一個程序產生一個孩子並退出時,如何獲取最後一個 PID?

  • January 14, 2020

我開始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?

是的,如果您使用switch ,ssh則生成多路復用器程序。沒有簡單的方法可以直接請求該 PID ,但假設您沒有產生許多程序,您可以使用 的輸出來獲取 PID,例如ControlMaster``-S``ssh``ps

ps f | grep "ssh -S mysocket" | cut -d " " -f 1

此命令將為您提供主伺服器的 pid:

ssh -S mysocket -O check example.com

您還可以使用:

pgrep --full --exact "ssh -S mysocket example.com -N -L 1234:localhost:1234"

引用自:https://serverfault.com/questions/862316