Ausgehend von der hier gestellten Frage möchte das OP wiederholt die PID eines Prozesses abfragen, der pidof
in einem Shell-Skript verwendet wird. Dies ist natürlich ineffizient, da ein neuer Prozess für das pidof
Programm 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, stdout
und 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 perl
Skript ist, das wiederholt ausgeführt wird, ps
so dass es das Problem nicht wirklich löst. Eine andere Option ist die Verwendung, auditd
die 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 auditd
Lösung akzeptieren werde, wenn dies die beste Option ist.
dbus
. B. ).
fork
oder der Variante) erstellt wird und dann das neue Programm mit einemexec
Familienmitglied gestartet wird . Sie möchten also wahrscheinlich das protokollierenexec*
, nicht dasfork
.