Me gustaría ordenar esta salida por lstart
(inicio del proceso):
ps -eo lstart,pid,cmd
¿Hay alguna manera de generar lstart en formato ISO como AAAA-MM-DD HH: MM: SS?
Pero ordenar solo no lo resuelve. Realmente me gustaría tener el formato de fecha ISO.
lstart
tiene un formato tan extraño? Está cerca de RFC 2822 pero con año al final.Respuestas:
Con
awk
+date
cooperación:Enfoque alternativo utilizando la palabra clave ps
etimes
(tiempo transcurrido desde que se inició el proceso, en segundos):date -d -"$1"seconds
- diferencia entre la marca deelapsed
tiempo actual y la hora, dará el valor de marca de tiempo del procesofuente
etimes
lugar delstart
obtener el tiempo transcurrido en segundos, que es un poco más fácil de pasardate -d -999seconds
.Puedes ordenar con:
fuente
Tenga en cuenta que
lstart
no es una de lasps
columnas estándar de Unix .No todos los sistemas tienen uno, y la salida varía entre implementaciones y potencialmente entre entornos locales.
Por ejemplo, en FreeBSD o con
ps
fromprocps-ng
(como se encuentra típicamente en sistemas basados en Linux no integrados) y laC
configuración regional, obtendrá:En macOS:
Además, dado que no le da el desplazamiento de GMT, la salida es ambigua en las zonas horarias que implementan DST (donde hay una hora durante el año donde ocurren las mismas fechas dos veces) y no siempre se clasifican cronológicamente.
Aquí, puede forzar que las horas sean UTC y usar
perl
elDate::Manip
módulo para analizar la fecha de una manera que comprenda los diferentes formatos naturales:O con el
ksh93
que también reconoce esos formatos de fecha:(tenga cuidado con que elimina los espacios en blanco finales de cada línea)
O con
zsh
y GNUdate
:O con
bash
(ozsh
) solo en Linux y con GNUdate
:También tenga en cuenta que el tiempo de inicio del proceso no es necesariamente el mismo que la última vez que el proceso ejecutó un comando, ya que los procesos generalmente pueden ejecutar más de un comando en su vida (los que no son generalmente los que nunca ejecutan un comando) . En otras palabras, no necesariamente corresponde a la hora en que se inició el comando (
args
campo, el equivalente estándar decmd
).Vea cómo
sleep 123
se considera que se inició al mismo tiempo quesleep 234
aunque se inició 4 segundos después. Eso se debe a que ese proceso 9388 se estaba ejecutando inicialmentesh
(y esperando 4 segundossleep 4
) antes de ejecutarsesleep 123
(y antes de eso, se estaba ejecutando elzsh
código tal como lo bifurcó mi shell interactivo, por lo que en diferentes momentos, para ese proceso, habría visto en laps
salida:,zsh
entoncessh
, entoncessleep
).fuente
Aquí hay una implementación con mayor rendimiento (no necesita ejecutar un nuevo proceso por línea):
y esto también permite cambiar fácilmente el orden de las columnas. Por ejemplo,
pid
primero y hora de inicio como segunda columna:fuente