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.