Estoy tratando de escribir un script que pueda monitorear el uso de la CPU de un proceso durante un intervalo (para crear un gráfico).
Hasta ahora, este es el comando que estoy usando
ps -p $PROCID -o cputime,etimes
Mi única preocupación es que la salida de cputime parece ser [dd]hh:mm
(o algo similar, no puedo recordarlo ahora)
¿Hay alguna forma de formatear cputime en segundos, como etime -> etimes para obtener el tiempo transcurrido en segundos?
Editar: esta es la salida que estoy recibiendo actualmente
2-03:01:33 2653793
Me gustaría que el primer parámetro se formatee en segundos, no en días-horas: minutos: segundos.
bash
ps
text-formatting
dreadiscool
fuente
fuente
Respuestas:
Esto convierte la primera vez a segundos:
Como ejemplo, el comando ps produce:
El
awk
comando procesa eso y devuelve:Explicación
-F'[: ]+'
Esto le dice a awk que trate los dos puntos y los espacios como separadores de campo. De esta manera, las horas, minutos y segundos aparecen como campos separados.
/:/ {t=$3+60*($2+60*$1); print t,$NF}
La inicial
/:/
restringe el código para trabajar solo en líneas que incluyen dos puntos. Esto elimina las líneas de encabezado. El número de segundos se calcula a partir de horas, minutos, segundos a través det=$3+60*($2+60*$1)
. El valor resultante parat
se imprime a lo largo del lado con el tiempo transcurrido.Días de manipulación
Si
ps
produce días, horas, minutos, segundos, como en:Luego, use este código en su lugar:
Si los días pueden o no estar antepuestos a la salida, utilice este comando combinado:
fuente
Si no quieres traer awk al juego, una solución bash pura (t_str contiene la cadena formateada, t_sec el tiempo decodificado en segundos):
fuente
No especifica para qué sistema operativo es; si es Linux, y dado que está interesado en monitorear un proceso específico, puede que le resulte más útil analizarlo
/proc/$PROCID/stat
; consulte laproc(5)
página del manual para obtener más detalles.fuente