trato de hacer un programa con C/C++, a comportarse como la parte superior de comandos en Linux. Investigué un poco y ya sabía cómo contar el uso de CPU de un proceso. Podemos obtener el uso de la CPU calculando stime + utime desde/proc/[PID]/stat en la hora actual y después de varios segundos. Luego calcule las diferencias stime + utime y divida el resultado con las diferencias de uptime en, luego obtenemos el porcentaje de uso de la CPU. Será tan fácil en proceso único/proceso de múltiples hilos.Cómo contar el uso de CPU de aplicación multiproceso en Linux
El problema es en el caso como httpd, donde funciona como multiproceso. Cuando el servidor web está ocupado, httpd bifurca los procesos secundarios para atender varias solicitudes. Luego cuento el número del proceso total, digamos 500. Quiero calcular el uso de la CPU de esos procesos, pero los resumo para que solo vea 1 uso de CPU httpd. Pero si hago el algoritmo como he mencionado anteriormente, cuando el número de procesos disminuye a < 500 después de varios segundos, obtengo los valores negativos, ya que el cálculo será así (por ejemplo, elijo un número aleatorio, solo para le dará una breve descripción):
Uptime: 155123, No of processes : 500, Stime + Utime total of 500 processes : 3887481923874
Uptime: 155545, No of processes : 390, Stime + Utime total of 390 processes : 2887123343874
Si se mira el ejemplo anterior, el delta del sTime + utime se da como resultado un valor negativo, ya que el número de proceso de disminución, y darle el valor más bajo después de unos pocos milisegundos. Solo quiero saber, ¿hay alguna otra manera de calcular tal proceso comportarse así? Gracias.
¿Cómo se conoce el conjunto de procesos? Por su grupo de proceso? Por el nombre del programa? –
Primero, obtengo el proceso padre principal. Lo sé porque tiene ppid 1 y digamos que es pid 1227. Luego, busque el directorio completo/proc /, que tiene ppid 1227. Si el/proc/pid1/stat tiene ppid 1227, entonces agrego su utime y stime a 1227 utime y stime. –