Publi

Píldora #Bash: Conocer el tiempo que lleva un proceso abierto en Linux

Bash tiempo proceso
¡Una nueva sección! Después de tanto tiempo y tantas secciones inacabadas. Algo que tenía ganas de hacer, es crear posts con esa serie de recetas, scripts, oneliners, o píldoras que se me van ocurriendo mientras trabajo en consola. Suelen ser cosas pequeñas y deberían caber en un tweet junto con una pequeña descripción. De todas formas a mí me gusta explicar un poco más las cosas para que quede bien claro.

En este caso, vamos a empezar conociendo el tiempo que lleva abierto un proceso, o un programa. Puede ser una información útil si, por ejemplo, tenemos corriendo servicios que ante un problema se reinician solos. O porque simplemente queremos saber ese dato, al igual que: ¿cuánto tiempo llevo con el ordenador encendido? que podemos responder con uptime. En este caso queremos saber cuánto tiempo llevo con un programa arrancado, como puede ser firefox, spotify, chrome, o apache.

Al grano

Vamos a poner dos métodos que iré explicando más adelante:

pid=$(pidof firefox); s=$(($(date +%s)-$(stat -c %Y /proc/»$pid»))); echo $(date -ud «@$s» +»$(($s/86400)) dias %Hh:%Mm:%Ss»)
1 dias 23h:39m:24s

O de una forma más corta, podemos utilizar

ps -eo pid,etime,comm | grep firefox
24441  1-23:53:14 firefox

Donde veremos primero el PID, luego el tiempo y luego el nombre del proceso.

Explicando el primero

En el primer ejemplo, lo primero que hacemos es coger el ID del proceso (PID).

pid=$(pidof firefox)

Tras ello, sacaremos la fecha y hora en formato UNIX del momento actual (como siempre, esto será el número de segundos desde el 1 de Enero de 1970 a las 00:00).
date +%s

Luego consultaremos la fecha del directorio /proc/PID y la pondremos en formato UNIX también. Recordemos que todos los procesos tendrán un directorio virtual en /proc/ con información sobre los mismos.
stat -c %Y /proc/»$pid

El objetivo es restar las dos fechas, así obtenemos el número de segundos transcurridos desde que se inició el proceso. .
s=$(($(date +%s)-$(stat -c %Y /proc/»$pid»))); echo $s

Ahora sólo queda ponerlo en un formato más humano, es decir, en días, horas, minutos y segundos. Para ello, el número de días lo podemos sacar a mano, ya que sería $s (el número de segundos) dividido entre 86400 (los segundos que tiene un día). Pero el resto se lo podemos pedir al comando date. Lo hacemos así porque date presenta fechas y horas (1 de Enero de 2017 a las 12:34:45) no tiempos transcurridos (120 días 3 horas, 4 minutos, 5 segundos), aunque la hora actual es lo mismo que pedir el tiempo transcurrido desde las 00:00.
Podríamos también calcular todos los elementos a mano (días, horas, minutos y segundos), el problema es que el script ya no entraba en un tweet:

pid=$(pidof firefox); secs=$(($(date +%s)-$(stat -c %Y /proc/»$pid»))); printf ‘%d days %dh:%dm:%ds\n’ $(($secs/86400)) $(($secs%86400/3600)) $(($secs%3600/60)) $(($secs%60))
1 dias 23h:39m:24s

El segundo ejemplo, con ps

Este segundo ejemplo, será mucho más portable entre sistemas UNIX, y mucho más corto, es verdad, pero no nos da mucho juego a la hora de escoger el formato de salida. El formato del tiempo será fijo (días-horas:minutos:segundos) y será importante visualizar el PID o el nombre del proceso.
Además, es mucho más lento, ya que con ps estamos analizando el tiempo de todos los procesos del sistema, aunque luego en pantalla sólo mostremos el que nos interesa porque la salida de ps la hemos pasado por grep.

También podría interesarte....

There are 13 comments left Ir a comentario

  1. Pingback: Píldora #Bash: Conocer el tiempo que lleva un proceso abierto en Linux | PlanetaLibre /

  2. Pedro /
    Usando Mozilla Firefox Mozilla Firefox 54.0 en Linux Linux

    pidof devuelve más de un PID si hay varios procesos abiertos. Mejor así: for pid in $(pidof firefox); do s=$(($(date +%s)-$(stat -c %Y /proc/$pid))); echo $pid: $(date -ud «@$s» +»$(($s/86400)) dias %Hh:%Mm:%Ss») ; done

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 54.0 en Ubuntu Linux Ubuntu Linux

      Muy cierto, pidof tal vez nos devuelva más de una PID. Gracias por la puntualización.

      Lo malo es que con un for ya no me cabe la píldora en un tweet 🙂

  3. Pingback: Píldora #Bash: Conocer el tiempo que lleva un proceso abierto en Linux – Poesía Binaria – ProyectoTicTac /

  4. asdfasf /
    Usando Mozilla Firefox Mozilla Firefox 70.0 en Windows Windows NT

    Es supermolesto que esten las frases borrandose y escribiendose todo el rato… ni siquiera soy capaz de concentrarme con esta ventana abierta.

    Una pena porque parece interesante lo que cuentas.

  5. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    These web slots redefine the meaning of ‘big wins.’ Can’t wait to dive in. สล็อตค่ายใหญ่

  6. WilliamSEO /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    Now you’ll discover what is vital, everything gives a url to the engaging page: pasar123 slot

  7. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    It’s disappointing when a favorite slot breaks unexpectedly. Time for manufacturers to take notice! เว็บสล็อตแตกง่าย

  8. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    I urge you to peruse this content it is fun portrayed … เว็บสล็อตทุกค่าย

  9. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    It is fine, in any case assess the data and actualities around this right. สล็อตโรม่า

  10. jsimitseo /
    Usando Google Chrome Google Chrome 120.0.0.0 en Windows Windows NT

    Benefit as much as possible from primarily premium substances – you will discover him or her for: ป๊อกเด้งออนไลน์

  11. jsimitseo /
    Usando Google Chrome Google Chrome 121.0.0.0 en Windows Windows NT

    I am keen on such themes so I will address page where it is cool depicted. concierge doctor

  12. Rank Xone /
    Usando Google Chrome Google Chrome 121.0.0.0 en Windows Windows NT

    I appreciate that online casinos promote responsible gaming. Setting limits and being mindful of your play is encouraged, ensuring a positive and enjoyable experience. 프리카지노

Leave a Reply