排序`ps`的输出

高蒂耶

我试图理解为什么ps不按我期望的方式表现。在手册页中,以下命令应显示ppidlstartlstart并按顺序对项目进行排序但是,当我在三个不同的终端中运行相同的命令时:

第一学期:

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
罗伯特

ps --sort=lstart实际上并没有按排序lstart,根据此serverfault注释

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},
[...]
};

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章