Z pytania tutaj OP chce wielokrotnie sondować pid procesu za pidof
pomocą skryptu powłoki. Oczywiście jest to nieefektywne, ponieważ nowy proces musi być uruchamiany dla pidof
programu wiele razy na sekundę (nie wiem, że jest to przyczyną skoków procesora w pytaniu, ale wydaje się prawdopodobne).
Zwykle w skrypcie powłoki można obejść ten problem, pracując z jednym programem, który generuje potrzebne dane, stdout
a następnie w razie potrzeby przetwarzając tekst. Chociaż wymaga to jednoczesnego działania większej liczby programów, prawdopodobnie procesor będzie mniej obciążony, ponieważ nowe procesy nie są ciągle tworzone w celu odpytywania.
Tak więc dla powyższego pytania jednym rozwiązaniem może być jakiś program, który wyświetla nazwy i stawki procesów podczas ich tworzenia. Następnie możesz zrobić coś takiego:
pids-names |
grep some_program |
cut -f 2 |
while read pid; do
process-pid "$pid"
done
Problem polega na tym, że rodzi to bardziej fundamentalne pytanie, w jaki sposób można drukować pidy i nazwy procesów podczas ich tworzenia?
Znalazłem program o nazwie ps-watcher
, chociaż problem polega na tym, że jest to tylko perl
skrypt, który wielokrotnie się uruchamia, ps
więc tak naprawdę nie rozwiązuje problemu. Inną opcją jest użycie, auditd
które prawdopodobnie mogłoby działać, gdyby dziennik był przetwarzany bezpośrednio przez tail -f
. Idealne rozwiązanie byłoby prostsze i bardziej przenośne niż to, ale zaakceptuję auditd
rozwiązanie, jeśli jest to najlepsza opcja.
dbus
.).
fork
lub wariantu), a następnie nowy program jest uruchamiany przy użyciu członkaexec
rodziny. Więc prawdopodobnie chcesz się zalogowaćexec*
, a niefork
.