Obtenir le PID d'un processus qui a commencé avec nohup via ssh

Je veux commencer un processus à l'aide de nohup sur une machine distante via ssh. Le problème est de savoir comment obtenir le PID du processus qui a commencé avec nohup, de sorte que le "processus de réellement faire quelque chose", pas une coquille instance ou de la comme. Aussi, je veux stocker stdout et stderr dans les fichiers, mais ce n'est pas la question ici...

Localement, il fonctionne parfaitement en utilisant

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

Il est l'écho m'a l'exact PID de la commande "sleep 30", je peux aussi voir à l'aide de "haut" ou "ps aux|grep sommeil".

Mais je vais avoir du mal à faire à distance via ssh. J'ai essayé quelque chose comme

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

mais je ne peux pas comprendre où placer le "echo $!" alors qu'il est affiché dans mon shell local. C'est toujours en me montrant mauvais PIDs, par exemple celui de la "bash" exemple etc.

Quelqu'un a une idée comment résoudre ce problème?

EDIT:
OK, le "bash -c" est peut-être pas nécessaire ici. Comme Lotharyx souligné, j'ai le droit PID juste fine à l'aide de

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

mais le problème est que si vous remplacez "sommeil 30" avec quelque chose qui produit un résultat, disons, "echo Hello World!", cette sortie ne se retrouvent pas dans le fichier "out", ni sur le plan local et sur le côté éloigné. Quelqu'un a une idée pourquoi?

EDIT2: Ma faute! Il n'y avait tout simplement pas d'espace à gauche sur l'autre appareil, c'est pourquoi les fichiers "out" et "err" est restée vide!

C'est donc ce travail. En outre, si l'on veut appeler plusieurs commandes en une ligne, séparés par un point-virgule (;), on peut toujours utiliser "bash -c", comme suit:

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

Puis il imprime le PID du "bash -c" sur le côté local, qui est tout simplement parfait. (Il est impossible d'obtenir le PID du "plus profond" ou "occupé" du processus, parce que chaque programme lui-même peut frayer de nouvelles sous-processus, il n'y a aucun moyen de savoir...)

OriginalL'auteur Daniel Jung | 2012-09-28