usuario - ver procesos en linux
¿Cómo obtener la hora de inicio de un proceso Linux de larga duración? (6)
¿Es posible obtener la hora de inicio de un viejo proceso en ejecución? 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. ¿La precisión se pierde para siempre en los procesos antiguos?
Como seguimiento de la respuesta de Adam Matan , la marca de tiempo del directorio /proc/<pid>
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 las marcas de reloj desde el inicio del sistema. 1
Esta es una unidad un poco difícil de usar; ver también convertir jiffies en segundos para más detalles.
awk -v ticks="$(getconf CLK_TCK)" ''NR==1 { now=$1; next }
END { print now - ($20/ticks) }'' /proc/uptime RS='')'' /proc/12345/stat
Esto debería darle segundos, que puede pasar a strftime()
para obtener una marca de tiempo (legible por el ser humano o de otra manera).
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 intentes
avk -v ticks="$(getconf CLK_TCK)" -v epoch="$(date +%s)" ''
NR==1 { now=$1; next }
END { printf "%9.0f", epoch - (now-($20/ticks))) }'' /proc/uptime RS='')'' /proc/12345/stat |
xargs -i date -d @{}
1 hombre proc ; buscar hora de inicio
El comando ps (al menos la versión de procps utilizada por muchas distribuciones de Linux) tiene varios campos de formato relacionados con la hora de inicio del proceso, incluido lstart
que siempre proporciona la fecha y hora completas del inicio del 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 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-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 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" 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 ... .)
Puede especificar un formateador y usar lstart
, como este comando:
ps -eo pid,lstart,cmd
El comando anterior dará salida a todos los procesos, con formateadores para obtener PID, comando ejecutado y tiempo 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 la página de manual de ps
o consultar la página de Opengroup para los demás formateadores.
ps -eo pid,cmd,lstart | grep YOUR-PID-HERE
ps -eo pid,etime,cmd|sort -n -k2
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