“ps -ew”不会显示宽输出

“ps -ew”不会显示宽输出

它只显示 /proc/pid/stat 的前 15 个字符。但“ps -w pid”显示的输出很宽。为什么?这是一个错误吗?谢谢。

答案1

我不认为“宽输出”意味着你想要的。我创建了一个名为的脚本foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo.sh并得到以下结果

$ ps -w
27848 pts/3    00:00:00 foo_foo_foo_foo

$ ps a
27848 pts/3    S      0:00 /bin/bash ./foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo.sh

$ ps -f
username 28049 26422  0 09:48 pts/3    00:00:00 /bin/bash ./foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo.sh

唯一的事情w似乎-w就是,如果我缩小窗口,它就会换行,这样它就不适合一行了:

$ ps w
28429 pts/3    S      0:00 /bin/bash ./foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_foo_fo
o_foo_foo.sh

答案2

您显然可以通过明确列出字段来实现这一点:

ps -ew -o pid,tty,time,cmd

或者,BSD 风格:

ps awxo pid,tty,time,cmd

在脚本中可能有用,但在命令行中没那么有用。除非你创建别名。

答案3

尝试ps -efww

在 Debian/Ubuntu 上,这将为您提供:

   -w              Wide output. Use this option twice for unlimited width.

答案4

感谢以上所有令我受益匪浅的评论。

ps -ew不包含任何 BSD 选项,所以我得到默认输出,即从中获取进程名称/proc/<pid>/stat,该名称不超过 15 个字符。

-w选项确实有效,它确实显示了宽输出。如果我将窗口缩小到很窄,ps -ew将尝试换行,以便我仍然可以得到 COMMAND 列中的完整 15 个字符。但是如果没有-w,例如ps -e,长行是看不到的,但它们仍然存在,因为我看不到它们,但可以看见grep它们。

在 35 列终端中(一些输出被剪切):

$ /bin/ps -e
  PID TTY          TIME CMD
22125 ?        00:00:00 telepathy-s
22127 ?        00:00:00 telepathy-g

$ /bin/ps -e | grep gabbl
22127 ?        00:00:00 telepathy-gabbl

截至ps -w <pid>,我从 procps 源代码中找到了答案parser.c。 如果有 PID 参数,它意味着 BSD 样式输出,而手册页中没有提到这一点:

   if((tmp>='0') && (tmp<='9'))   return ARG_PID;
   ......
   case ARG_PID:
          prefer_bsd_defaults = 1;
          err = parse_trailing_pids();

因此ps -w <pid>将显示 BSD 风格的输出,它将显示命令参数(COMMAND)而不是可执行文件名称(CMD)。-w效果与上面的例子类似。

相关内容