O comando lsof não pode ver seu PID devido à expansão do shell. Isso significa que $(pgrep -nf a.out) será executado em seu servidor local, não remoto.
Para evitar essa expansão, use aspas simples em vez de aspas duplas.
Exemplo simples:
$ foo=local
$ ssh debian8 "foo=remote; echo $foo"
local
$ ssh debian8 'foo=remote; echo $foo'
remote
Você pode ter problemas com o comando pgrep . Este é o meu teste simples usando -of em vez de -nf flags (Use -af flag para ver o comando completo):
// on remote server
# sleep 200 &
[1] 27228
# exit
// on local host
$ ssh debian8 'echo $(pgrep -nf sleep)'
27244 <-- not expected pid
$ ssh debian8 'echo $(pgrep -of sleep)'
27228 <-- this one
Este $() , na verdade, lança um subshell, pgrep não se informa como uma correspondência, mas reporta seu shell pai. Portanto, usar a opção -n não fornecerá o pid real, mas o pid de pgrep em si.