Ausgehend von der hier gestellten Frage möchte das OP wiederholt die PID eines Prozesses abfragen, der pidofin einem Shell-Skript verwendet wird. Dies ist natürlich ineffizient, da ein neuer Prozess für das pidofProgramm mehrmals pro Sekunde gestartet werden muss (ich weiß nicht, dass dies die Ursache für die CPU-Spitzen in der Frage ist, aber es scheint wahrscheinlich).
Normalerweise besteht die Umgehung dieser Art in einem Shell-Skript darin, mit einem einzelnen Programm zu arbeiten, das die benötigten Daten ausgibt, stdoutund bei Bedarf eine Textverarbeitung durchzuführen. Dies bedeutet, dass mehr Programme gleichzeitig ausgeführt werden müssen, es ist jedoch wahrscheinlich weniger CPU-intensiv, da nicht ständig neue Prozesse für Abrufzwecke erstellt werden.
Für die obige Frage könnte eine Lösung darin bestehen, ein Programm zu haben, das die Namen und Pids von Prozessen ausgibt, wenn sie erstellt werden. Dann könnten Sie etwas tun wie:
pids-names |
grep some_program |
cut -f 2 |
while read pid; do
process-pid "$pid"
done
Das Problem dabei ist, dass es eine grundlegendere Frage aufwirft, wie Pids und Prozessnamen gedruckt werden können, wenn sie erstellt werden.
Ich habe ein Programm namens gefunden ps-watcher, obwohl das Problem dabei ist, dass es nur ein perlSkript ist, das wiederholt ausgeführt wird, psso dass es das Problem nicht wirklich löst. Eine andere Option ist die Verwendung, auditddie wahrscheinlich funktionieren könnte, wenn das Protokoll direkt über verarbeitet würde tail -f. Eine ideale Lösung wäre einfacher und tragbarer als diese, obwohl ich eine auditdLösung akzeptieren werde, wenn dies die beste Option ist.
dbus. B. ).
forkoder der Variante) erstellt wird und dann das neue Programm mit einemexecFamilienmitglied gestartet wird . Sie möchten also wahrscheinlich das protokollierenexec*, nicht dasfork.