对 ps 的输出进行排序不起作用

B F*_*ley 3 linux ps sort

我想要的输出排序如下命令基于pcpu

ps -p 29492 -L -o pid,tid,psr,pcpu
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

ps -p 29492 -L -o pid,tid,psr,pcpu --sort=pcpu
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用。我怎样才能解决这个问题?

Ste*_*itt 7

这可能是因为在你的实现ps,只选适用于过程,而不是线程(见fancy_spew()procps'display.c)。据我所知,如果您想对线程进行排序,则需要对输出进行后处理;例如

ps -p 29492 -L -o pid,tid,psr,pcpu | sort -n -k4,4
Run Code Online (Sandbox Code Playgroud)

但随后标题行在输出中混淆了。如果要保留标题行,可以将其拉出并单独打印:

ps -p 29492 -L -o pid,tid,psr,pcpu | sed -e1\!b -e'w /dev/fd/2' -ed | sort -n -k4,4
Run Code Online (Sandbox Code Playgroud)

您还可以通过为所有输出选择器指定空白标题值来简单地删除标题行:

ps -p 29492 -L -o pid=,tid=,psr=,pcpu= | sort -n -k4,4
Run Code Online (Sandbox Code Playgroud)

在所有这些情况下,您可以通过添加反向排序-rsort参数。排序顺序可能受LC_NUMERIC或影响LC_ALL;设置LC_ALL=C.正确排序带有小数点的值。