Gostaria de classificar essa saída por lstart
(início do processo):
ps -eo lstart,pid,cmd
Existe uma maneira de gerar lstart no formato ISO como AAAA-MM-DD HH: MM: SS?
Mas classificar sozinho não resolve. Eu realmente gostaria de ter o formato de data ISO.
lstart
esse formato é estranho? É perto da RFC 2822, mas com o ano no final.Respostas:
Com
awk
+date
cooperação:Abordagem alternativa usando a palavra-chave ps
etimes
(tempo decorrido desde o início do processo, em segundos):date -d -"$1"seconds
- a diferença entre o registro de data e hora atual eelapsed
o valor do registro de data e hora do processofonte
etimes
vez delstart
obter o tempo decorrido em segundos, é um pouco mais fácil de passardate -d -999seconds
.Você pode classificar com:
fonte
Observe que
lstart
não é uma dasps
colunas padrão do Unix .Nem todos os sistemas possuem um, e a saída varia entre implementações e potencialmente entre localidades.
Por exemplo, no FreeBSD ou com o
ps
fromprocps-ng
(como normalmente encontrado em sistemas baseados no Linux não incorporados) e aC
localidade, você obtém:No macOS:
Além disso, como não fornece o deslocamento GMT, a saída é ambígua nos fusos horários que implementam o horário de verão (onde há uma hora durante o ano em que as mesmas datas ocorrem duas vezes) e nem sempre são ordenados cronologicamente.
Aqui, você pode forçar o horário a ser UTC e usar
perl
oDate::Manip
módulo para analisar a data de uma maneira que compreenda diferentes formatos naturais:Ou com o
ksh93
qual também reconhece esses formatos de data:(cuidado, retira os espaços em branco finais de cada linha)
Ou com
zsh
e GNUdate
:Ou com
bash
(ouzsh
) apenas no Linux e com GNUdate
:Lembre-se também de que a hora de início do processo não é necessariamente a mesma da última vez que o processo executou um comando, pois os processos geralmente podem executar mais de um comando durante a vida útil (aqueles que não o fazem geralmente são aqueles que nunca executam um comando) . Em outras palavras, não corresponde necessariamente à hora em que o comando (
args
campo, o equivalente padrão decmd
) foi iniciado.Veja como
sleep 123
é visto como iniciado ao mesmo tempo como sesleep 234
tivesse sido iniciado 4 segundos depois. Isso ocorre porque o processo 9388 estava sendo executado inicialmentesh
(e aguardando 4 segundossleep 4
) antes de ser executadosleep 123
(e antes disso, ele estava executando ozsh
código conforme foi bifurcado pelo meu shell interativo, portanto, em diferentes momentos no tempo, para esse processo, você teria visto naps
saída:,zsh
entãosh
, entãosleep
).fonte
Aqui está uma implementação com maior desempenho (não é necessário executar um novo processo por linha):
e isso também permite alterar facilmente a ordem das colunas. Por exemplo,
pid
primeiro e hora de início como segunda coluna:fonte