对“ps”的输出进行排序

对“ps”的输出进行排序

我试图理解为什么ps它的行为不符合我的预期。从手册页中,以下命令应显示ppidlstart,其中项目按lstart顺序排序。但是,当我在三个不同的终端中运行相同的命令时:

第一学期:

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

第二期:

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

第三学期:

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

这里有几件事我不明白。

  • 第 1 项和第 2 项中的项目按最新的排在最前面。第 3 项中的项目按最旧的顺序排列在最前面。即使考虑字母顺序,顺序也是不同的。

  • PPID 3383 对于所有三个术语都是相同的,但开始时间不同。看起来几个不同的PPID可能是相同的,尽管它们是不同的进程?


系统信息:

$ 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

答案1

ps --sort=lstart实际上并不排序lstart,根据此服务器故障评论:

lstart给出完整的时间戳,但不能用作排序键。 start_time gives通常的“过去 24 小时内的时间,否则为日期”列,并且可以用作排序键。

ps这在的手册页中隐式记录,其中lstart未在OBSOLETE SORT KEYS部分下列出,但start_time已列出。

源代码也支持这一点,请参阅从第 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},
[...]
};

编辑:对正确答案的解释进行了扩展,并删除了原始答案的误导部分。

答案2

我在我的 gnu/gentoo 上尝试了一下,没有这样的问题,这里是:

 ~ # 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

相关内容