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

Resuelto ajwood asked hace 13 años • 8 respuestas

¿Es posible obtener la hora de inicio de un proceso en ejecución antiguo? Parece que psinformará la fecha (no la hora) si no se inició hoy, y solo el año si no se inició este año. ¿Se pierde para siempre la precisión de los procesos antiguos?

ajwood avatar Apr 20 '11 20:04 ajwood
Aceptado

Puede especificar un formateador y utilizarlo 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 hora de inicio.

Ejemplo (desde 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]                    
      ...

Puede leer psla página de manual de o consultar la página de Opengroup para conocer los otros formateadores.

wkl avatar Apr 20 '2011 13:04 wkl

El comando ps (al menos la versión procps utilizada por muchas distribuciones de Linux) tiene una serie de campos de formato que se relacionan con la hora de inicio del proceso, incluido lstartel que siempre proporciona la fecha y hora completas en que se inició 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 obtener informació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-long-a-process-has-been-running

(En mi experiencia en 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 con 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" aproximadamente a las 16:50, luego generé un nuevo shell bash, luego ejecuté el comando "ps -p 1 -p $$" dentro de ese shell poco después... .)

Nathan avatar Mar 08 '2014 22:03 Nathan