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 .