Erhalte die PID eines mit nohup über ssh gestarteten Prozesses

8

Ich möchte einen Prozess mit nohup auf einem Remote-Rechner über ssh starten. Das Problem ist, wie man die PID des mit nohup gestarteten Prozesses bekommt, also den "Prozess, der tatsächlich etwas macht", nicht irgendeine äußere Shell-Instanz oder dergleichen. Außerdem möchte ich stdout und stderr in Dateien speichern, aber das ist nicht das Problem hier ...

Lokal funktioniert es einwandfrei mit

%Vor%

Er gibt mir die genaue PID des Befehls "sleep 30" zurück, die ich auch mit "top" oder "ps aux | grep sleep" sehen kann.

Aber ich habe Probleme, es per ssh per Fernzugriff zu tun. Ich habe etwas wie

versucht %Vor%

aber ich kann nicht herausfinden, wo ich das "echo $!" so dass es in meiner lokalen Shell angezeigt wird. Es zeigt mir immer falsche PIDs an, zum Beispiel die der "bash" -Instanz etc.

Hat jemand eine Idee, wie man das löst?

BEARBEITEN: OK, die "bash -c" wird hier möglicherweise nicht benötigt. Wie Lotharyx sagte, bekomme ich mit

die richtige PID %Vor%

Aber dann ist das Problem, dass, wenn Sie "Schlaf 30" durch etwas ersetzen, das Ausgabe erzeugt, sagen wir "Echo Hello World!", diese Ausgabe endet nicht in der Datei "out", weder auf der lokalen noch auf entfernte Seite. Hat jemand eine Idee warum?

EDIT2: Meine Schuld! Auf dem anderen Gerät war einfach kein Platz mehr, deshalb blieben die Dateien "out" und "err" leer!

Das funktioniert also. Wenn man mehrere Befehle in einer Reihe, getrennt durch ein Semikolon (;), aufrufen möchte, kann man auch weiterhin "bash -c" verwenden:

%Vor%

Dann druckt es die PID von "bash -c" auf der lokalen Seite, was gut ist. (Es ist unmöglich, die PID des "innersten" oder "beschäftigt" -Prozesses zu bekommen, weil jedes Programm selbst neue Subprozesse erzeugen kann, es gibt keine Möglichkeit, das herauszufinden ...)

    
Daniel Jung 28.09.2012, 21:05
quelle

1 Antwort

8

Ich habe Folgendes versucht (der lokale Rechner ist Debian; der entfernte Rechner ist CentOS) und es hat genau so funktioniert, wie ich es erwarte:

%Vor%

Auf der Remote-Maschine habe ich ps -e gemacht und diese Zeile gesehen:

%Vor%

Also, auf meinem lokalen Rechner ist die Ausgabe eindeutig die PID von "sleep", die auf dem entfernten Rechner ausgeführt wird.

Warum fügen Sie bash zu Ihrem Befehl hinzu, wenn Sie ihn über einen SSH-Tunnel senden?

    
Brian A. Henning 28.09.2012, 21:15
quelle

Tags und Links