Obtenha o PID de um processo iniciado com nohup via ssh

Eu quero começar um processo usando nohup em uma máquina remota via ssh. O problema é como obter o PID do processo iniciado com nohup, então o "processo realmente fazendo algo", não alguma instância de shell externa ou algo parecido. Além disso, eu quero armazenar stdout e stderr em arquivos, mas essa não é a questão aqui ...

Localmente, funciona sem falhas usando

nohup sleep 30 > out 2> err < /dev/null & echo $!

É ecoando-me o PID exato do comando "sleep 30", que também posso ver usando "top" ou "ps aux | grep sleep".

Mas estou tendo problemas para fazer isso remotamente via ssh. Eu tentei algo como

ssh remote_machine 'nohup bash -c "( ( sleep 30 ) & )" > out 2> err < /dev/null'

mas não consigo descobrir onde colocar o "echo $!" de modo que seja exibido no meu shell local. Está sempre me mostrando PIDs erradas, por exemplo, a da instância "bash" etc.

Alguém tem uma ideia de como resolver isso?

EDIT: OK, o "bash-c" pode não ser necessário aqui. Como Lotharyx apontou, eu recebo bem o PID certo usando

ssh remote 'nohup sleep 30 > out 2> err < /dev/null & echo $!'

mas então o problema é que se você substituir "sleep 30" por algo que produza saída, digamos, "echo Hello World!", essa saída não terminará no arquivo "out", nem no lado local nem no lado remoto. Alguém tem uma ideia do porquê?

EDIT2: minha culpa! Não havia mais espaço no outro dispositivo, por isso os arquivos "out" e "err" ficaram vazios!

Então isso está funcionando. Além disso, se alguém quiser chamar vários comandos em uma linha, separados por um ponto-e-vírgula (;), ainda é possível usar "bash -c", da seguinte forma:

ssh remote 'nohup bash -c "echo bla;sleep 30;echo blupp" > out 2> err < /dev/null & echo $!'

Em seguida, imprime o PID do "bash -c" no lado local, o que é bom. (É impossível obter o PID do processo "mais interno" ou "ocupado", porque todo programa em si pode gerar novos subprocessos, não há como descobrir ...)

questionAnswers(1)

yourAnswerToTheQuestion