Z pytania tutaj OP chce wielokrotnie sondować pid procesu za pidofpomocą skryptu powłoki. Oczywiście jest to nieefektywne, ponieważ nowy proces musi być uruchamiany dla pidofprogramu 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, stdouta 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 perlskrypt, który wielokrotnie się uruchamia, pswięc tak naprawdę nie rozwiązuje problemu. Inną opcją jest użycie, auditdktó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ę auditdrozwiązanie, jeśli jest to najlepsza opcja.
dbus.).
forklub wariantu), a następnie nowy program jest uruchamiany przy użyciu członkaexecrodziny. Więc prawdopodobnie chcesz się zalogowaćexec*, a niefork.