Para saber cuándo se inició un proceso, mi primera suposición fue verificar la hora en que /proc/<pid>/cmdline
se escribió / modificó la última vez.
ps
También muestra un START
campo. Pensé que ambas fuentes serían las mismas. A veces no son lo mismo. ¿Cómo es posible?
Respuestas:
Al menos en Linux, también puedes hacer:
para tener una hora de inicio más útil.
Sin embargo , tenga en cuenta que es el momento en que se inició el proceso , no necesariamente el momento en que se invocó el comando que está ejecutando actualmente. Los procesos pueden (y generalmente lo hacen) ejecutar más de un comando en su vida útil. Y los comandos a veces generan otros procesos.
Los tiempos de los archivos en
/proc
Linux (al menos) generalmente son la fecha en que se instanciaron esos archivos, que sería la primera vez que algo intenta acceder a ellos o enumerar el contenido del directorio.Por ejemplo:
La expansión
/proc/$$/xx*
provocó que el shell leyera el contenido del/proc/$$
cual se creó lacmdline
instancia del archivo.Consulte también: Marca de tiempo del socket en / proc // fd
fuente
proc es un sistema de archivos virtual, por lo que no confiaría en ninguna información de estado de archivos.
La hora de inicio del proceso se encuentra en / proc / PID / stat columna 22 . Se administra en segundos después del inicio del sistema. Para convertirlo a segundos, debe dividirlo entre
sysconf(_SC_CLK_TCK)
100 para la mayoría de los sistemas (¡pero no para todos!).Para obtener el tiempo de inicio del sistema, usted determina el tiempo de actividad actual en segundos, que es el primer valor de / proc / uptime .
Al tener esos dos números, resta el primero del segundo y obtiene el número de segundos transcurridos desde que inició el programa.
Ejemplo (para pidgin ):
Nota: este simple ejemplo no funciona si
pidof
devuelve PID multipe.fuente