Hallo Liste! Habe folgendes Problem. Mit WAIT kann ich auf ein Programm warten, bis es beendet ist, indem ich die PID eingebe. Wenn ich nun in einem Script auf diese PID warten möchte, wie bekomme ich zuvor die PID? Gibt es einen Befehl, der als Rückgabewert mir die PID des Programmes liefert? Diese Anfrage ist allgemein und soll sich auf kein spezielles Programm beziehen. Als Beispiel: Ich rufe in einem Script ein xterm auf. Das Script soll erst weiterlaufen wenn xterm geschlossen wurde. Also brauch ich die PID dieses xterm. Vielen Dank und ich hoffe meine Überlegung ist richtig. Gruß Sebastian
* On Mon, 03 Feb 2003 at 9:26 +0100, Sebastian Bauer wrote:
Habe folgendes Problem. Mit WAIT kann ich auf ein Programm warten, bis es beendet ist, indem ich die PID eingebe. Wenn ich nun in einem Script auf diese PID warten möchte, wie bekomme ich zuvor die PID? Gibt es einen Befehl, der als Rückgabewert mir die PID des Programmes liefert?
Nun, da gibt es z.B. den Befehl pidof - siehe man pidof. Auch die bash stellt Dir in den Variablen $? und $! die PID der zuletzt aufgerufenen Vorder- bzw. Hintergrundprozesse zu Verfügung - siehe man bash.
Diese Anfrage ist allgemein und soll sich auf kein spezielles Programm beziehen. Als Beispiel: Ich rufe in einem Script ein xterm auf. Das Script soll erst weiterlaufen wenn xterm geschlossen wurde. Also brauch ich die PID dieses xterm.
In diesem Fall bin ich so frei, zu behaupten, Du fährst mit der Kirche ums Kreuz. xterm, wie auch viele andere Programme auch, kehren sowieso erst zum Aufrufer zurück, wenn sie fertig sind. Also einfach nicht mir & in den Hintergrund schicken, und gut iss. -- Adalbert GPG welcome, request public key: mailto:adalbert+key@lopez.at
* Adalbert Michelic schrieb am 03.Feb.2003:
* On Mon, 03 Feb 2003 at 9:26 +0100, Sebastian Bauer wrote:
Habe folgendes Problem. Mit WAIT kann ich auf ein Programm warten, bis es beendet ist, indem ich die PID eingebe. Wenn ich nun in einem Script auf diese PID warten möchte, wie bekomme ich zuvor die PID? Gibt es einen Befehl, der als Rückgabewert mir die PID des Programmes liefert?
Nun, da gibt es z.B. den Befehl pidof - siehe man pidof.
pidof kannte ich noch nicht, aber wenn ich die Manpages richtig verstehe, dann braucht es als Argument den Namen des Programmes. Aber wer garantiert, daß es diesen Namen nur einmal gibt? Es könnte doch ein anderer User zur gleichen Zeit das gleiche Skript aufgerufen haben. Oder auch man selber.
Auch die bash stellt Dir in den Variablen $? und $! die PID der zuletzt aufgerufenen Vorder- bzw. Hintergrundprozesse zu Verfügung - siehe man bash.
$! ist richtig. Aber $? gibt nicht den PID [1], sondern den Exitstatus zurück. Von dem PID hättest Du auch nichts, denn wenn es sich um ein Vordergrundprogramm handelt, dann ist der Prozeß tot, bevor Du den PID lesen könntest.
Diese Anfrage ist allgemein und soll sich auf kein spezielles Programm beziehen. Als Beispiel: Ich rufe in einem Script ein xterm auf. Das Script soll erst weiterlaufen wenn xterm geschlossen wurde. Also brauch ich die PID dieses xterm.
In diesem Fall bin ich so frei, zu behaupten, Du fährst mit der Kirche ums Kreuz. xterm, wie auch viele andere Programme auch, kehren sowieso erst zum Aufrufer zurück, wenn sie fertig sind. Also einfach nicht mir & in den Hintergrund schicken, und gut iss.
Stimmt auch wieder. [1] Es heißt _der_ Identifizierer, daher der PID, oder etwa nicht? Bernd -- Bitte die Etikette beachten: http://www.suse-etikette.de.vu/etikette.html Bitte Realnamen angeben, kein Vollquoting, kein Html, PGP oder Visitenkarten benutzen. Signatur mit "-- " abtrennen, bei Antworten "Re: " voranstellen, sonst nichts. |Zufallssignatur 4
* On Mon, 03 Feb 2003 at 10:08 +0100, Bernd Brodesser wrote:
* Adalbert Michelic schrieb am 03.Feb.2003:
* On Mon, 03 Feb 2003 at 9:26 +0100, Sebastian Bauer wrote:
Habe folgendes Problem. Mit WAIT kann ich auf ein Programm warten, bis es beendet ist, indem ich die PID eingebe. Wenn ich nun in einem Script auf diese PID warten möchte, wie bekomme ich zuvor die PID? Gibt es einen Befehl, der als Rückgabewert mir die PID des Programmes liefert?
Nun, da gibt es z.B. den Befehl pidof - siehe man pidof.
pidof kannte ich noch nicht, aber wenn ich die Manpages richtig verstehe, dann braucht es als Argument den Namen des Programmes. Aber wer garantiert, daß es diesen Namen nur einmal gibt? Es könnte doch ein anderer User zur gleichen Zeit das gleiche Skript aufgerufen haben. Oder auch man selber.
Ja, sonderlich verlässlich ist diese Methode nicht.
Auch die bash stellt Dir in den Variablen $? und $! die PID der zuletzt aufgerufenen Vorder- bzw. Hintergrundprozesse zu Verfügung - siehe man bash.
$! ist richtig. Aber $? gibt nicht den PID [1], sondern den Exitstatus zurück. Von dem PID hättest Du auch nichts, denn wenn es sich um ein Vordergrundprogramm handelt, dann ist der Prozeß tot, bevor Du den PID lesen könntest.
*aufshirnschlag* Verzweiflung, wie kann ich nur so einen Blödsinn reden ... Natürlich, Du hast recht. [...]
[1] Es heißt _der_ Identifizierer, daher der PID, oder etwa nicht?
Hmmm, hört sich plausibel an. Die PID sagte ich, weils mir leichter von der Zunge ging, ich hab mir da noch nicht sonderlich viele Gedanken gemacht :-) -- Adalbert GPG welcome, request public key: mailto:adalbert+key@lopez.at
* Sebastian Bauer schrieb am 03.Feb.2003:
Habe folgendes Problem. Mit WAIT kann ich auf ein Programm warten, bis es
Nein, nicht mit WAIT sondern mit wait, das ist was anderes.
beendet ist, indem ich die PID eingebe. Wenn ich nun in einem Script auf diese PID warten möchte, wie bekomme ich zuvor die PID? Gibt es einen Befehl, der als Rückgabewert mir die PID des Programmes liefert?
Welchen Prozeß? Der Prozeß der Shell steht in $$, aber damit wirst Du nichts anfangen können, aber in $! steht der PID des zuletzt im Hintergrund geschickten Prozesses.
Diese Anfrage ist allgemein und soll sich auf kein spezielles Programm beziehen. Als Beispiel: Ich rufe in einem Script ein xterm auf. Das Script soll erst weiterlaufen wenn xterm geschlossen wurde. Also brauch ich die PID dieses xterm.
Wenn Du es nicht mit der bash machst, sondern mit einem Programm, so mußt Du den Systemaufruf fork ausführen um einen neuen Prozeß zu starten. Der PID des neuen Prozesses wird dem alten Prozeß als Rückgabewert mitgegeben. Aber da Du von Skript sprachst, gehe ich davon aus, daß Dir das obige reicht. Bernd -- ACK = ACKnowledge = Zustimmung | NAC = No ACknowledge = keine Zustimmung DAU = Dümmster Anzunehmender User | LOL = Laughing Out Loud = Lautes Lachen IIRC = If I Remember Correctly = Falls ich mich richtig erinnere OT = Off Topic = Am Thema (der Liste) vorbei |Zufallssignatur 11
Ich danke Euch für die Antworten. Die Variable $! war genau wonach ich gesucht habe. Entschuldigt, dass ich das nicht selbst in der man-page gefunden habe. Gruß, Sebastian
participants (3)
-
Adalbert Michelic
-
B.Brodesser@t-online.de
-
Sebastian Bauer