O $!
não funciona, como você diz, porque não foi feito em segundo plano pelo shell atual. Na verdade, o processo ssh
nem sequer é filho do shell do qual você o iniciou. No meu sistema Arch, pelo menos, ele é executado como um filho de PID 1
, o processo init
.
Então, para obter o PID, você pode simplesmente usar ps
:
$ ssh -f localhost sleep 100
$ ps aux | grep '[s]sh.*-f'
terdon 20648 0.0 0.0 43308 680 ? Ss 12:15 0:00 ssh -f localhost sleep 100
Isso me diz que o PID é 20648
* .
Como alternativa, e mais simples, use pgrep -f
:
$ pgrep -f 'ssh.*-f'
20648
E, para matá-lo (eles):
pkill -f 'ssh.*-f'
* Consulte esta pergunta se você estiver se perguntando sobre o [s]
no comando grep
.