Ssh
當最後一個程序產生一個孩子並退出時,如何獲取最後一個 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_pid
是XXXX
,當我檢查實際程序時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"