Para saber quando um processo foi iniciado, meu primeiro palpite foi verificar a hora em que /proc/<pid>/cmdline
foi escrito / modificado da última vez.
ps
também mostra um START
campo. Eu pensei que ambas as fontes seriam as mesmas. Às vezes eles não são os mesmos. Como poderia ser?
Respostas:
No Linux, pelo menos, você também pode:
para ter um horário de início mais útil.
Observe, porém, que é a hora em que o processo foi iniciado, não necessariamente a hora em que o comando que está executando no momento foi chamado. Os processos podem (e geralmente o fazem) executar mais de um comando durante sua vida útil. E comandos às vezes geram outros processos.
Os horários dos arquivos no
/proc
Linux (pelo menos) geralmente são a data em que esses arquivos foram instanciados, o que seria a primeira vez que algo tentaria acessá-los ou listar o conteúdo do diretório.Por exemplo:
A expansão
/proc/$$/xx*
fez com que o shell lesse o conteúdo,/proc/$$
causando acmdline
instanciação do arquivo.Consulte também: Registro de data e hora do soquete em / proc // fd
fonte
proc é um sistema de arquivos virtual, portanto, não confio em nenhuma informação de status do arquivo.
O horário de início do processo está localizado na coluna / proc / PID / stat 22 . É fornecido em instantes após a inicialização do sistema. Para convertê-lo em segundos, você deve dividir por
sysconf(_SC_CLK_TCK)
100 para a maioria dos sistemas (mas não todos!).Para obter o tempo de inicialização do sistema, você determina o tempo de atividade atual em segundos, que é o primeiro valor de / proc / uptime .
Tendo esses dois números, você subtrai o primeiro do segundo e obtém o número de segundos passados desde o início do programa.
Exemplo (para pidgin ):
Nota: este exemplo simples não funciona se
pidof
retornar PIDs com várias faixas.fonte