¿Cómo obtener la hora de inicio de un proceso de Linux de larga duración?
¿Es posible obtener la hora de inicio de un proceso en ejecución antiguo? Parece que ps
informará 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?
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 ps
la página de manual de o consultar la página de Opengroup para conocer los otros formateadores.
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 lstart
el 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... .)