GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo obtener la hora de inicio de un proceso de Linux de larga duración?

Puede especificar un formateador y usar lstart , como este comando:

ps -eo pid,lstart,cmd

El comando anterior generará todos los procesos, con formateadores para obtener el PID, la ejecución del comando y la fecha y la hora de inicio.

Ejemplo (de la línea de comandos de Debian/Jessie)

$ ps -eo pid,lstart,cmd
  PID CMD                                          STARTED
    1 Tue Jun  7 01:29:38 2016 /sbin/init                  
    2 Tue Jun  7 01:29:38 2016 [kthreadd]                  
    3 Tue Jun  7 01:29:38 2016 [ksoftirqd/0]               
    5 Tue Jun  7 01:29:38 2016 [kworker/0:0H]              
    7 Tue Jun  7 01:29:38 2016 [rcu_sched]                 
    8 Tue Jun  7 01:29:38 2016 [rcu_bh]                    
    9 Tue Jun  7 01:29:38 2016 [migration/0]               
   10 Tue Jun  7 01:29:38 2016 [kdevtmpfs]                 
   11 Tue Jun  7 01:29:38 2016 [netns]                     
  277 Tue Jun  7 01:29:38 2016 [writeback]                 
  279 Tue Jun  7 01:29:38 2016 [crypto]                    
      ...

Puedes leer ps 's manpage o verifique la página de Opengroup para los otros formateadores.


El comando ps (al menos la versión de procps utilizada por muchas distribuciones de Linux) tiene varios campos de formato que se relacionan con la hora de inicio del proceso, incluido lstart que siempre proporciona la fecha y la hora completas en las que comenzó el proceso:

# ps -p 1 -wo pid,lstart,cmd
  PID                  STARTED CMD
    1 Mon Dec 23 00:31:43 2013 /sbin/init

# ps -p 1 -p $$ -wo user,pid,%cpu,%mem,vsz,rss,tty,stat,lstart,cmd
USER       PID %CPU %MEM    VSZ   RSS TT       STAT                  STARTED CMD
root         1  0.0  0.1   2800  1152 ?        Ss   Mon Dec 23 00:31:44 2013 /sbin/init
root      5151  0.3  0.1   4732  1980 pts/2    S    Sat Mar  8 16:50:47 2014 bash

Para ver una discusión sobre cómo se publica la información en el sistema de archivos /proc, consulte https://unix.stackexchange.com/questions/7870/how-to-check-how-time-a-process-has-been-running

(En mi experiencia con Linux, la marca de tiempo en los directorios /proc/ parece estar relacionada con un momento en el que se accedió recientemente al directorio virtual en lugar de la hora de inicio de los procesos:

# date; ls -ld /proc/1 /proc/$$ 
Sat Mar  8 17:14:21 EST 2014
dr-xr-xr-x 7 root root 0 2014-03-08 16:50 /proc/1
dr-xr-xr-x 7 root root 0 2014-03-08 16:51 /proc/5151

Tenga en cuenta que en este caso ejecuté un comando "ps -p 1" alrededor de las 16:50, luego generé un nuevo shell bash, luego ejecuté el comando "ps -p 1 -p $$" dentro de ese shell poco después... .)


ls -ltrh /proc | grep YOUR-PID-HERE

Por ejemplo, el PID de mi Google Chrome es 11583:

ls -l /proc | grep 11583
dr-xr-xr-x  7 adam       adam                     0 2011-04-20 16:34 11583

Como continuación de la respuesta de Adam Matan, el /proc/<pid> la marca de tiempo del directorio como tal no es necesariamente directamente útil, pero puede usar

awk -v RS=')' 'END{print $20}' /proc/12345/stat

para obtener la hora de inicio en tics de reloj desde el arranque del sistema.

Esta es una unidad un poco difícil de usar; vea también convertir jiffies a segundos para más detalles.

awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next }
    END { printf "%9.0f\n", now - ($20/ticks) }' /proc/uptime RS=')' /proc/12345/stat

Esto debería darte segundos, que puedes pasar a strftime() para obtener una marca de tiempo (legible por humanos o de otro tipo).

awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next }
    END { print strftime("%c", systime() - (now-($20/ticks))) }' /proc/uptime RS=')' /proc/12345/stat

Actualizado con algunas correcciones de Stephane Chazelas en los comentarios; ¡gracias como siempre!

Si solo tienes Mawk, tal vez intente

awk -v ticks="$(getconf CLK_TCK)" -v epoch="$(date +%s)" '
  NR==1 { now=$1; next }
  END { printf "%9.0f\n", epoch - (now-($20/ticks)) }' /proc/uptime RS=')' /proc/12345/stat |
xargs -i date -d @{}

proceso de hombre; busque hora de inicio .


Linux
  1. Cómo usar el comando táctil de Linux + ejemplos

  2. Encuentre el tiempo de ejecución de un comando o proceso en Linux

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

  4. ¿Cómo obtengo la ruta de un proceso en Unix/Linux?

  5. ¿Cómo obtener la identificación del proceso para eliminar un proceso nohup?

Cómo cambiar la prioridad de un proceso en Linux

Cómo obtener el uso de la CPU de un solo proceso en Linux

Cómo obtener la cantidad de procesadores/núcleos en Linux

Cómo matar o terminar un proceso de Linux:la guía definitiva

Cómo encontrar el PID y PPID de un proceso en Linux

Cómo enviar procesos a segundo plano en Linux