Classificando a saída de 'ps'

3

Estou tentando entender por que ps não se comporta como eu esperava. Nas man pages, o comando a seguir deve exibir ppid e lstart , com itens classificados por lstart order. No entanto, quando eu corro o mesmo comando em três terminais diferentes:

Primeiro termo:

gauthier@sobel:~/ $ ps -o ppid -o lstart --sort=lstart
 PPID                  STARTED
21142 Tue Dec 16 13:45:18 2014
 3383 Mon Dec 15 15:40:35 2014

Segundo termo:

gauthier@sobel:~/bin $ ps -o ppid -o lstart --sort=lstart
 PPID                  STARTED
19595 Tue Dec 16 13:45:03 2014
 3383 Mon Dec 15 14:49:14 2014

Terceiro termo:

gauthier@sobel:~ $ ps -o ppid -o lstart --sort=lstart
 PPID                  STARTED
 3383 Tue Dec 16 13:39:05 2014
16357 Tue Dec 16 13:45:12 2014

Há várias coisas que não entendo aqui.

  • os itens nos termos 1 e 2 são classificados primeiro de forma mais recente. Itens no termo 3 são classificados primeiro mais antigos. Mesmo considerando a ordem alfabética, as ordens diferem.

  • O PPID 3383 é o mesmo para todos os três termos, mas em diferentes horários de início. Parece que vários PPID distintos podem ser os mesmos, embora sejam processos diferentes?

Informações do sistema:

$ ps -V
procps-ng version 3.3.9
$ uname -a
Linux sobel 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
    
por Gauthier 16.12.2014 / 13:57

2 respostas

4

ps --sort=lstart na verdade não classifica por lstart , De acordo com este comentário de falha de servidor :

lstart gives a full timestamp, but cannot be used as a sort key. start_time gives the usual 'time within the last 24 hours, date otherwise' column, and can be used as a sort key.

Isso está implicitamente documentado nas man pages de ps , em que lstart não está listado na seção OBSOLETE SORT KEYS , mas start_time é.

O código fonte também faz o backup, veja esta definição começando na linha 1506 :

/* Many of these are placeholders for unsupported options. */
static const format_struct format_array[] = {
/* code       header     print()      sort()    width need vendor flags  */
[...]
{"lstart",    "STARTED", pr_lstart,   sr_nop,    24,   0,    XXX, ET|RIGHT},
[...]
{"start_time", "START",  pr_stime,    sr_start_time, 5, 0,   LNx, ET|RIGHT},
[...]
};

Editar : expandiu a explicação sobre a resposta certa e removeu a parte enganosa da original.

    
por 16.12.2014 / 15:05
0

Eu tento no meu gnu / gentoo, não há problema, aqui está:

 ~ # ps -o ppid -o lstart --sort=lstart
 PPID                  STARTED
 3851 Mon Dec 15 21:25:51 2014
 4037 Mon Dec 15 21:25:52 2014
 4042 Tue Dec 16 22:02:24 2014
 ~ # ps -o ppid -o lstart --sort=lstart
 PPID                  STARTED
 3851 Mon Dec 15 21:25:51 2014
 4037 Mon Dec 15 21:25:52 2014
 4042 Tue Dec 16 22:02:25 2014
 ~ # ps -o ppid -o lstart --sort=lstart
 PPID                  STARTED
 3851 Mon Dec 15 21:25:51 2014
 4037 Mon Dec 15 21:25:52 2014
 4042 Tue Dec 16 22:02:26 2014
 ~ # ps -V
procps-ng version 3.3.9
 ~ # uname -a
Linux  3.12.21-gentoo-r1 #9 SMP Fri Nov 28 18:59:44 CST 2014 i686 Intel(R) Core(TM)2 CPU T7200 @ 2.00GHz GenuineIntel GNU/Linux
    
por 16.12.2014 / 15:11

Tags