它只显示/ proc / pid / stat的前15个字符。 但是“ps -w pid”显示宽输出。 为什么? 这是一个错误? 谢谢。
我不认为“宽输出”意味着你想要的。 我创build了一个名为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
你显然可以通过明确地列出这些字段来做到这一点:
ps -ew -o pid,tty,time,cmd
或者,BSD风格:
ps awxo pid,tty,time,cmd
可能对脚本有用,对命令行不太有用。 除非你做别名。
试试ps -efww 。
在Debian / Ubuntu上,这给你:
-w Wide output. Use this option twice for unlimited width.
感谢您提供给我的所有评论。
ps -ew包含BSD选项,所以我得到默认的输出,它从/proc/<pid>/stat得到进程名,不超过15个字符。
-w选项确实有效,它显示宽输出。 如果我把窗口缩小得很窄, ps -ew会尝试换行,这样我仍然可以在COMMAND列中得到完整的15个字符。 但是,与ps -e ,没有看到长长的线条,但是它们仍然存在,因为我看不到它们,但却可以帮助它们。
在35列terminal(一些输出剪切):
$ /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中find答案。 如果有PID参数,这意味着BSD风格输出,这在man手册中没有提到:
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与上面的例子类似。