De la pregunta aquí , el OP quiere sondear repetidamente el pid de un proceso usando pidof
un script de shell. Por supuesto, esto es ineficiente ya que se debe iniciar un nuevo proceso para el pidof
programa varias veces por segundo (no sé si esta es la causa de los picos de CPU en la pregunta, pero parece probable).
Por lo general, la forma de evitar este tipo de cosas en un script de shell es trabajar con un solo programa que genera los datos que necesita stdout
y luego hacer un procesamiento de texto si es necesario. Si bien esto implica que más programas se ejecuten simultáneamente, es probable que sea menos intensivo en CPU ya que no se crean continuamente nuevos procesos para fines de sondeo.
Entonces, para la pregunta anterior, una solución podría ser tener algún programa que genere los nombres y los pids de los procesos a medida que se crean. Entonces podrías hacer algo como:
pids-names |
grep some_program |
cut -f 2 |
while read pid; do
process-pid "$pid"
done
El problema con esto es que plantea una pregunta más fundamental: ¿cómo pueden imprimirse los nombres de proceso y los pids a medida que se crean?
He encontrado un programa llamado ps-watcher
, aunque el problema con esto es que es solo un perl
script que se ejecuta repetidamente, ps
por lo que realmente no resuelve el problema. Otra opción es usar lo auditd
que probablemente podría funcionar si el registro se procesó directamente a través de tail -f
. Una solución ideal sería más simple y más portátil que esto, aunque aceptaré una auditd
solución si es la mejor opción.
dbus
).
fork
o variante), luego el nuevo programa se inicia utilizando un miembro de laexec
familia. Por lo tanto, probablemente desee registrar elexec*
, no elfork
.