GNU/Linux >> Tutoriales Linux >  >> Linux

¿Obtener tiempo de usuario y kernel de un proceso en ejecución?

¿Hay alguna forma de determinar usando las herramientas estándar de Linux/Unix cuánto ha gastado un proceso en el modo Usuario y cuánto tiempo esperando el kernel?

En otras palabras, exactamente los valores de "usuario" y "sys" que obtienes cuando usas time , pero durante tiempo de ejecución del proceso?

NOTA: una forma es usar WBEM y enumerar Linux_UnixProcess, pero necesito usar other herramienta que esta; mi objetivo es verificar lo que me dice el proveedor de WBEM, es decir, necesito usar una herramienta diferente.

Respuesta aceptada:

En Linux, la información está disponible en los campos 14 a 17 de /proc/$pid/stat (ver proc(5) para más detalles):

Los campos son:

  • 14:tiempo de usuario (en número de tics de reloj)
  • 15:hora del sistema
  • 16:tiempo de usuario de niños esperados
  • 17:tiempo del sistema de niños esperados

(todos los subprocesos de un proceso dado tienen los mismos valores allí)

No son reportados directamente por ps .

ps informa 14 + 15 con ps -o time y 14 + 15 + 16 + 17 con ps --cumulative -o bsdtime .

Tenga en cuenta que el segundo campo en /proc/$pid/stat puede contener espacios o caracteres de nueva línea, por lo que no puede analizarlo con $1 de awk , $2

Puedes usar perl como:

$ perl -MPOSIX -l -0777 -ne '@f = /(.*)|S+/gs;
    printf "utime: %.2fnstime: %.2fncutime: %.2fncstime: %.2fn",
      map {$_/POSIX::sysconf( &POSIX::_SC_CLK_TCK )}@f[13..16]' "/proc/$pid/stat"
utime: 3.79
stime: 2.06
cutime: 56.49
cstime: 34.27

Un proceso puede recuperar sus propios tiempos con getrusage(RUSAGE_SELF) y getrusage(RUSAGE_CHILDREN) .

También hay un times llamada al sistema que recupera la misma información. Los shells POSIX tienen un times incorporado para eso. Algunos shells también proporcionan esa información con time (sin argumentos).

$ times
0m3.800s 0m2.060s
0m56.512s 0m34.276s

$ ps -o time -p "$$"
    TIME
00:00:05
$ ps --cumulative -o bsdtime -p "$$"
  TIME
  1:36

Linux
  1. ¿Cambiar el entorno de un proceso en ejecución?

  2. Linux:¿diferencia entre el espacio del usuario y el espacio del kernel?

  3. Linux:¿cómo obtener la hora del reloj de pared de un proceso en ejecución?

  4. ¿Ejecutar un script cada vez que se instala un nuevo kernel?

  5. PHP y mod_fcgid:ap_pass_brigade falló en la función handle_request_ipc

Kernel de Linux y sus funciones

Cómo encontrar y matar procesos en ejecución en Linux

Procesos corriendo

¿Cuál es la diferencia entre el espacio de usuario y el espacio del kernel?

¿Cómo puedo obtener la hora del reloj de pared de un proceso en ejecución?

¿Con qué usuario deberían ejecutarse NGinx y PHP?