2016-04-22 3 views
1

ich versuchte pid des Prozesses zu bekommen ich mit setsid lief und das sollte im Hintergrund wie folgt auszuführen:

test.sh: 

#/bin/bash 
setsid nohup ./my_program & 
echo $! 

wenn ich ./test.sh führen Sie es druckt eine pid von my_program Prozess und es ist genau was ich brauche. Aber wenn führen diese Befehle einen nach dem anderen in meiner Schale wie folgt aus:

$ setsid nohup ./my_program & 
$ echo $! 

Es gibt mir eine pid von setsid Befehl (oder etwas anderes sein, aber es fast allen Zeiten gibt mir pid von my_program minus eins) .

Was passiert hier? Warum unterscheiden sich die Ergebnisse von Befehlen, die ich im Terminal selbst ausgeführt habe, von den Ergebnissen von test.sh?

Btw, können Sie einige einfache Art des Prozesses wissen, die ich mit Sesid begann und die ich im Hintergrund ausführen muss?

+0

Vielleicht hat es mit Sesid's Forking Verhalten zu tun? Es gibt nur Forks aus, wenn es der Prozessgruppenleiter ist; siehe [hier] (http://stackoverflow.com/a/9685973/1735215). – 0range

+0

Um die PID eines Prozesses über Sezid zu erhalten, können Sie [dies] versuchen (http://Stackoverflow.com/a/19767312/1735215) – 0range

+0

@ 0range yeah, ich denke, erste Link ist genau das, was ich brauchte. Danke vielmals! Könnten Sie das bitte als Antwort schreiben, damit ich es annehmen kann? – PepeHands

Antwort

1

Umbuchen Kommentare oben als Antwort:

Dies liegt daran, setsid nur den aktuellen Prozess gabelt, wenn es der Prozess Gruppenleiter ist. Eine detaillierte Erklärung finden Sie unter here.

Um die PID eines Prozesses über Sezid zu erhalten, können die Ansätze here versucht werden.

0

Seid ruft Fork, um sicherzustellen, dass es eine neue Prozessgruppe sowie eine neue Sitzung erstellt, daher wird die resultierende PID nicht mit der PID von Seid übereinstimmen. Am saubersten wäre es, wenn my_program seine PID in einer Datei speichert.

Wenn Sie später kill an my_program senden möchten, sollten Sie überprüfen, ob die PID tatsächlich mit einem Programm namens my_program über/proc file system übereinstimmt oder den ps-Befehl mit etwas magischem Code aufrufen. (Dies ist eine sehr häufige Methode, die von vielen Daemons verwendet wird)

Verwandte Themen