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

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