qual - ps aux linux




Como obter a hora de início de um processo Linux de longa duração? (4)

Como resposta à resposta de Adam Matan , o /proc/<pid> hora do diretório /proc/<pid> como tal não é necessariamente diretamente útil, mas você pode usar

awk -v RS=')' 'END{print $20}' /proc/12345/stat

para obter o tempo de início em pulsos de clock desde a inicialização do sistema. 1

Esta é uma unidade um pouco complicada de usar; veja também converta jiffies em segundos para detalhes.

awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next }
    END { print now - ($20/ticks) }' /proc/uptime RS=')' /proc/12345/stat

Isso deve dar segundos, que você pode passar para strftime() para obter um timestamp (legível para humanos ou de outra forma).

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

Atualizado com algumas correções de Stephane Chazelas nos comentários; obrigado como sempre!

Se você só tem Mawk, talvez tente

awk -v ticks="$(getconf CLK_TCK)" -v epoch="$(date +%s)" '
  NR==1 { now=$1; next }
  END { printf "%9.0f", epoch - (now-($20/ticks)) }' /proc/uptime RS=')' /proc/12345/stat |
xargs -i date -d @{}

1 homem proc ; procure pelo horário de início .

É possível obter a hora de início de um processo antigo em execução? Parece que o ps informará a data (não a hora), se não foi iniciado hoje, e apenas o ano, se não foi iniciado este ano. A precisão é perdida para sempre em processos antigos?


O comando ps (pelo menos a versão procps usada por muitas distribuições do Linux) possui vários campos de formato relacionados ao horário de início do processo, incluindo o lstart que sempre fornece a data e a hora completas em que o processo foi iniciado:

# 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 obter uma discussão de como as informações são publicadas no sistema de arquivos / proc, consulte https://unix.stackexchange.com/questions/7870/how-to-check-how-long-a-process-has-been-running

(Na minha experiência no Linux, o registro de data e hora nos diretórios / proc / parece estar relacionado a um momento em que o diretório virtual foi acessado recentemente, em vez do horário de início dos processos:

# 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

Note que neste caso eu executei um comando "ps-p 1" por volta das 16:50, então criei um novo shell bash, então executei o comando "ps -p 1 -p $$" dentro daquele shell logo depois ... .)


    ps -eo pid,cmd,lstart | grep YOUR-PID-HERE

 ps -eo pid,etime,cmd|sort -n -k2




process