Wie erhalte ich einen Prozess-ID ein Prozess Namen gegeben? Oder, wie finde ich heraus, wenn ein Prozess noch läuft, eine Prozess-ID gegeben?
Es gibt keine zuverlässige Möglichkeit, dies portabel in der Shell. Einige Systeme verwenden Prozess-IDs ähnlich wie Dateideskriptoren. Das heißt, Sie verwenden die PID mit der niedrigsten Nummer, die derzeit nicht verwendet wird beim Starten eines neuen Prozesses. Das bedeutet, dass die PID, die du suchst, ist, aber nicht auf den Prozess verweist, den du denkst es tut.
Die übliche Vorgehensweise ist die Ausgabe von ps zu analysieren, aber das beinhaltet eine Race-Bedingung, da die pid Sie auf diese Weise finden kann nicht den gleichen Prozess beziehen, wenn Sie tatsächlich mit diesem pid etwas tun. Es gibt jedoch keinen guten Weg, das in einem Shell-Skript zu finden, also sei darauf hingewiesen, dass du vielleicht in eine Falle gehst.
Ein Vorschlag ist, auf Solaris verwenden pgrep wenn und ‚ps h -o pid -C $ STRING‘, wenn nicht, und Ihre ps unterstützt die Syntax, aber keiner von diejenigen sind perfekt oder allgegenwärtig.
Die normale Lösung beim Schreiben von C-Programmen besteht darin, eine pid Datei zu erstellen und sie dann mit fcntl (2) zu sperren. Wenn dann ein anderes Programm wissen möchte, ob das Programm wirklich läuft, kann es versuchen, eine Sperre für die Datei zu erlangen. Wenn der Lock-Versuch fehlschlägt, dann weiß er die Datei läuft noch.
Wir haben keine Optionen in der Shell so, es sei denn, wir können ein C-Programm liefern, das die Sperre für das Skript versuchen kann. Trotzdem existiert die oben beschriebene Wettlaufbedingung immer noch.
Sie wollen das Java-Programm am Ende der Ausführung seine PID zurückgeben? Oder das Shell-Skript, das die PID des Java-Programms zurückgibt, nachdem das Java-Programm beendet wurde? – vpit3833
das Shell-Programm. Das Java-Programm wird immer ausgeführt, dies ist nur ein Shell-Skript, um die PID – Ronedog