1

I start ssh -S mysocket example.com to connect example.com. If my connection hangs, I need to kill that process:

ssh -S mysocket example.com -N -L 1234:localhost:1234 &
last_pid=$!

...(do something blocker)

kill $last_pid 

But that doesn't work. If last_pid is XXXX, when I check actual process with ps -ef | grep ssh, the process' pid seems XXXX + 1.

Which means that ssh -S socket starts in background, spawns a child and exit.

How do we capture last pid in this case?

ceremcem
  • 208
  • 1
  • 10
  • `$!` is set when you put a command in the background using `&`. Since you aren't using `&` anywhere in your question I can't figure out what exactly you are expecting to happen. – kasperd Jul 15 '17 at 13:36
  • Yes, I forgot to add `&` in the question. – ceremcem Jul 15 '17 at 13:54

2 Answers2

1

Yes, the ssh is spawning multiplexer process for ControlMaster if you use -S switch. There is no simple way how to ask for that PID directly the ssh, but assuming you are not spawning many processes, you can use the output of the ps to get the PID, for example

ps f | grep "ssh -S mysocket" | cut -d " " -f 1
Jakuje
  • 9,145
  • 2
  • 40
  • 44
0

This command will give you the pid of the master:

ssh -S mysocket -O check example.com

You can also use:

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