я начинаю 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?
Да, ssh
порождает процесс мультиплексора для ControlMaster
если вы используете -S
переключатель. Нет простого способа запросить этот PID напрямую ssh
, но предполагая, что вы не создаете много процессов, вы можете использовать вывод ps
чтобы получить PID, например
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"