它只显示 /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
效果与上面的例子类似。