Dalla domanda qui , l'OP vuole eseguire ripetutamente il polling del pid di un processo usando pidof
in uno script di shell. Naturalmente questo è inefficiente in quanto un nuovo processo deve essere avviato per il pidof
programma più volte al secondo (non so che questa è la causa dei picchi di CPU nella domanda, ma sembra probabile).
Di solito il modo per aggirare questo genere di cose in uno script di shell è lavorare con un singolo programma che emetta i dati necessari stdout
e quindi eseguire un po 'di elaborazione del testo, se necessario. Sebbene ciò comporti l'esecuzione simultanea di più programmi, è probabile che richieda meno CPU, poiché non vengono continuamente creati nuovi processi a scopo di polling.
Quindi, per la domanda di cui sopra, una soluzione potrebbe essere quella di avere qualche programma che emetta i nomi e i pid dei processi mentre vengono creati. Quindi potresti fare qualcosa del tipo:
pids-names |
grep some_program |
cut -f 2 |
while read pid; do
process-pid "$pid"
done
Il problema è che solleva una domanda più fondamentale, come possono essere stampati pid e nomi dei processi mentre vengono creati?
Ho trovato un programma chiamato ps-watcher
, anche se il problema è che si tratta solo di uno perl
script che viene eseguito ripetutamente, ps
quindi non risolve davvero il problema. Un'altra opzione è quella auditd
che potrebbe funzionare se il registro è stato elaborato direttamente tramite tail -f
. Una soluzione ideale sarebbe più semplice e più portatile di questa, sebbene accetterò una auditd
soluzione se è l'opzione migliore.
dbus
.).
fork
o variante), quindi il nuovo programma viene avviato utilizzando un membro dellaexec
famiglia. Quindi probabilmente vuoi registrare ilexec*
, non ilfork
.