Wie fügt man einem Linux-Befehl eine nutzlose Zufallszeichenfolge hinzu, um sie über PS zu identifizieren?

Wie fügt man einem Linux-Befehl eine nutzlose Zufallszeichenfolge hinzu, um sie über PS zu identifizieren?

Ich schreibe ein PHP-Skript zum Starten und Überwachen von Prozessen. Früher habe ich ps <pid>das so gemacht, aber in seltenen Fällen ist es nicht zuverlässig, da nach dem eigentlichen Beenden meines Prozesses ein irrelevanter Prozess mit derselben PID ausgeführt wurde.

Ich wollte also meinem Befehl eine zufällige Zeichenfolge hinzufügen, damit mein PHP-Skript sicher sein kann, dass es sich um den Prozess handelt, den es gestartet hat. Welche Möglichkeiten habe ich, dies zu tun?

Bisher bin ich auf Folgendes gestoßen:

"USELESS_VAR_0nQjdXR45P=\"{$cmdRandomString}\" | $cmd"

Wobei $cmd der eigentliche Befehl ist, den ich ausführen wollte. $cmdRandomString ist die zufällige Zeichenfolge, die ich hinzugefügt habe. Aber aus irgendeinem Grund ps auxwird die nutzlose Variable hier nicht angezeigt.

Liegt es daran, dass es schnell fertig war?

Ich habe auch versucht, eine Dummy-Befehlsoption wie diese hinzuzufügen, --xxxx=yyyyaber der Befehl würde einen schwerwiegenden Fehler zurückgeben, wenn die Option nicht bekannt wäre.

Gibt es eine Möglichkeit, dies zu tun? Oder gibt es eine zuverlässige Möglichkeit, einen anderen Prozess als den unzuverlässigen PID zu identifizieren?

Antwort1

Gibt es außer der unzuverlässigen PID eine zuverlässige Möglichkeit, einen Prozess zu identifizieren?

Dies lässt sich zuverlässig erreichen, indem Sie den Prozess selbst starten und abwarten, wenn er beendet wird. Beispielsweise erhalten Sie das Unix-Signal SIGCHILD. Die PID bleibt weiterhin bestehen (in einem Zustand, der „Zombie“ genannt wird), bis Sie beispielsweise die Benachrichtigung über den Tod des untergeordneten Elements erhalten waitpid().

In manchen Fällen müssen Sie dies beispielsweise an einen Prozessüberwachungs-Daemon delegieren systemd. Dann könnten Sie ihn beispielsweise mit abfragen systemctl status my-process.service. Dies wäre nützlich, wenn Sie eine PHP-Webseite hätten, die einen lang laufenden Prozess wie einen Daemon starten müsste.

verwandte Informationen