Dalla domanda qui , l'OP vuole eseguire ripetutamente il polling del pid di un processo usando pidofin uno script di shell. Naturalmente questo è inefficiente in quanto un nuovo processo deve essere avviato per il pidofprogramma 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 stdoute 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 perlscript che viene eseguito ripetutamente, psquindi non risolve davvero il problema. Un'altra opzione è quella auditdche 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 auditdsoluzione se è l'opzione migliore.
dbus.).
forko variante), quindi il nuovo programma viene avviato utilizzando un membro dellaexecfamiglia. Quindi probabilmente vuoi registrare ilexec*, non ilfork.