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.

lstarttiene un formato tan extraño? Está cerca de RFC 2822 pero con año al final.Respuestas:
Con
awk+datecooperació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 deelapsedtiempo actual y la hora, dará el valor de marca de tiempo del procesofuente
etimeslugar delstartobtener 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
lstartno es una de laspscolumnas 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
psfromprocps-ng(como se encuentra típicamente en sistemas basados en Linux no integrados) y laCconfiguració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
perlelDate::Manipmódulo para analizar la fecha de una manera que comprenda los diferentes formatos naturales:O con el
ksh93que también reconoce esos formatos de fecha:(tenga cuidado con que elimina los espacios en blanco finales de cada línea)
O con
zshy 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 (
argscampo, el equivalente estándar decmd).Vea cómo
sleep 123se considera que se inició al mismo tiempo quesleep 234aunque 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 elzshcódigo tal como lo bifurcó mi shell interactivo, por lo que en diferentes momentos, para ese proceso, habría visto en lapssalida:,zshentoncessh, 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,
pidprimero y hora de inicio como segunda columna:fuente