我试图理解为什么ps
不按我期望的方式表现。在手册页中,以下命令应显示ppid
和lstart
,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
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] 删除。
我来说两句