【问题标题】:Viewing full output of PS command查看 PS 命令的完整输出
【发布时间】:2011-01-10 17:14:54
【问题描述】:

当我在我使用 putty 连接到的 linux 服务器上运行 ps -aux 命令时,很少有进程太长而无法适应我当前的窗口宽度。有其他选择吗?

-- 更新--

很抱歉降级,我认为其他人也不会发现答案有用,所以我降级了。

这是您要的信息。

hadoop-user@hadoop-desk:~$ echo $TERM
xterm

hadoop-user@hadoop-desk:~$ stty -a
speed 38400 baud; rows 47; columns 158; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

hadoop-user@hadoop-desk:~$ echo $COLUMNS
158

【问题讨论】:

  • 顺便说一句,您提供的信息非常少,因此您不应该对迄今为止获得的所有答案进行否决。我们正在努力帮助您。您应该在问题中发布echo $TERMstty -aecho $COLUMNS 的输出。
  • 试试stty ocrnl 和/或stty sane?
  • ps axuww 这就是答案 ;) 至少对我来说。翻倍的ww 做到了。

标签: linux bash shell process


【解决方案1】:

使用 auxww 标志,您将在终端窗口和 shell 脚本中看到输出的完整路径。

darragh@darraghserver ~ $uname -a
SunOS darraghserver 5.10 Generic_142901-13 i86pc i386 i86pc

darragh@darraghserver ~ $which ps
/usr/bin/ps<br>

darragh@darraghserver ~ $/usr/ucb/ps auxww | grep ps
darragh 13680  0.0  0.0 3872 3152 pts/1    O 14:39:32  0:00 /usr/ucb/ps -auxww
darragh 13681  0.0  0.0 1420  852 pts/1    S 14:39:32  0:00 grep ps

ps aux 列出所有用户执行的所有进程。有关详细信息,请参阅man psww 标志设置无限宽度。

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

我在以下博客上找到了答案:
http://www.snowfrog.net/2010/06/10/solaris-ps-output-truncated-at-80-columns/

【讨论】:

  • 这是一个比当前接受的解决方案更好的答案,因为并非所有系统(嵌入式 linux)都包含“大多数”、“更多”或“更少”寻呼机。
  • 或者,ps auxf &gt; ps.log
【解决方案2】:

您可能正在使用诸如lessmost 之类的寻呼机,因为ps aux 的输出比一个屏幕长。如果是这样,以下选项将导致(或强制)长行换行而不是被截断。

ps aux | less -+S

ps aux | most -w

如果您使用以下任一命令,则不会换行,但您可以使用箭头键或其他移动键左右滚动。

ps aux | less -S    # use arrow keys, or Esc-( and Esc-), or Alt-( and Alt-) 

ps aux | most       # use arrow keys, or < and > (Tab can also be used to scroll right)

morepg 的行总是换行。

ps aux 用于管道时,w 选项是不必要的,因为ps 仅在输出到终端时使用屏幕宽度。

【讨论】:

  • 请注意,在 Linux 中,内核代码中硬编码的字符数仍限制为 4096 个:请参阅stackoverflow.com/questions/199130/…
  • @MarianoPaniga:你用那条评论救了我的命。
  • 最多?你的意思是更多吗?
  • @MikeFurlender:不,most 是另一个寻呼机。我在答案中添加了一个链接。
  • @DennisWilliamson 您关于使用管道时不需要w 的声明似乎与系统相关。在 openSUSE Leap 15.0 和 Ubuntu 18.04 上,ps aux | grep &lt;something&gt; 之类的命令作用于被终端宽度截断的ps 的输出。
【解决方案3】:

简单而完美:

ps -efww

不会截断行

【讨论】:

  • 这是负责完整输出的“ww”部分”
【解决方案4】:

把它扔到猫身上,它会自动换行

ps aux | cat

【讨论】:

  • 你可以详细说明,但更多。
  • 适用于 BusyBox 等轻量级 Linux 发行版的良好解决方案,其中高级工具不可用 :)
  • 也好记!
  • 非常非常简单。 cat 命令在每个 nix 盒子上。
【解决方案5】:

传递几个ws 将忽略显示宽度。

【讨论】:

  • 您是否尝试添加多个?
  • 我尝试添加超过 5 个..但不知何故它没有显示完整的命令。
  • 一旦达到 3,您就会看到所有内容。 任何程序都看不到它所显示的内容。你有一个不同的问题。
【解决方案6】:

如果您手动指定输出格式,您还需要确保args 选项在输出字段列表中是最后一个,否则将被截断。

ps -A -o args,pid,lstart给了

/usr/lib/postgresql/9.5/bin 29900 Thu May 11 10:41:59 2017
postgres: checkpointer proc 29902 Thu May 11 10:41:59 2017
postgres: writer process    29903 Thu May 11 10:41:59 2017
postgres: wal writer proces 29904 Thu May 11 10:41:59 2017
postgres: autovacuum launch 29905 Thu May 11 10:41:59 2017
postgres: stats collector p 29906 Thu May 11 10:41:59 2017
[kworker/2:0]               30188 Fri May 12 09:20:17 2017
/usr/lib/upower/upowerd     30651 Mon May  8 09:57:58 2017
/usr/sbin/apache2 -k start  31288 Fri May 12 07:35:01 2017
/usr/sbin/apache2 -k start  31289 Fri May 12 07:35:01 2017
/sbin/rpc.statd --no-notify 31635 Mon May  8 09:49:12 2017
/sbin/rpcbind -f -w         31637 Mon May  8 09:49:12 2017
[nfsiod]                    31645 Mon May  8 09:49:12 2017
[kworker/1:0]               31801 Fri May 12 09:49:15 2017
[kworker/u16:0]             32658 Fri May 12 11:00:51 2017

ps -A -o pid,lstart,args 会为您提供完整的命令行:

29900 Thu May 11 10:41:59 2017 /usr/lib/postgresql/9.5/bin/postgres -D /tmp/4493-d849-dc76-9215 -p 38103
29902 Thu May 11 10:41:59 2017 postgres: checkpointer process   
29903 Thu May 11 10:41:59 2017 postgres: writer process   
29904 Thu May 11 10:41:59 2017 postgres: wal writer process   
29905 Thu May 11 10:41:59 2017 postgres: autovacuum launcher process   
29906 Thu May 11 10:41:59 2017 postgres: stats collector process   
30188 Fri May 12 09:20:17 2017 [kworker/2:0]
30651 Mon May  8 09:57:58 2017 /usr/lib/upower/upowerd
31288 Fri May 12 07:35:01 2017 /usr/sbin/apache2 -k start
31289 Fri May 12 07:35:01 2017 /usr/sbin/apache2 -k start
31635 Mon May  8 09:49:12 2017 /sbin/rpc.statd --no-notify
31637 Mon May  8 09:49:12 2017 /sbin/rpcbind -f -w
31645 Mon May  8 09:49:12 2017 [nfsiod]
31801 Fri May 12 09:49:15 2017 [kworker/1:0]
32658 Fri May 12 11:00:51 2017 [kworker/u16:0]

【讨论】:

  • > 确保 args 选项位于输出字段列表的最后,否则将被截断。正是我需要的。谢谢!
【解决方案7】:

您可以设置输出格式,例如只查看命令和进程ID。

ps -eo pid,args

查看 ps 的手册页了解更多输出格式。或者,您可以使用-w--width n 选项。

如果所有其他方法都失败了,这是另一种解决方法,(只是为了查看您的长 cmd)

awk '{ split(FILENAME,f,"/") ; printf "%s: %s\n", f[3],$0 }' /proc/[0-9]*/cmdline

【讨论】:

  • 更改顺序再试一次,pid,args
【解决方案8】:

很抱歉迟到了,但刚刚找到了解决问题的方法。

行被截断是因为 ps 坚持使用 $COLUMNS 的值,即使此时输出不是屏幕。这是一个错误,恕我直言。但是很容易解决,只需制作 ps 认为你有一个超宽屏幕,即在 ps 命令期间将 COLUMNS 设置为高。一个例子:

$ ps -edalf                 # truncates lines to screen width
$ COLUMNS=1000 ps -edalf    # wraps lines regardless of screen width

我希望这对某人仍然有用。所有其他的想法似乎都太复杂了:)

【讨论】:

    【解决方案9】:

    如果上述解决方案均无效,则ps 的输出不是您的问题。也许您需要将 putty 设置为wrap long lines

    否则,我们需要更多信息。

    【讨论】:

    • 哦,好吧。发生了一些奇怪的事情。
    【解决方案10】:

    如果您使用来自 ps aux 的管道 grep 您正在寻找的命令,它将自动换行文本。我在这里使用了很多其他答案,但有时如果您正在寻找特定的东西,最好使用 grep 并且您知道它会换行。

    例如ps aux | grep ffmpeg

    【讨论】:

      【解决方案11】:

      我找到了这个答案,因为上述答案都不起作用

      https://unix.stackexchange.com/questions/91561/ps-full-command-is-too-long

      基本上,内核限制了我的命令行。

      【讨论】:

        【解决方案12】:

        别人提到的截断证据,(个人例子)

        foo=$(ps -p 689 -o command); echo "$foo"
        
        COMMAND
        /opt/conda/bin/python -m ipykernel_launcher -f /root/.local/share/jupyter/runtime/kernel-5732db1a-d484-4a58-9d67-de6ef5ac721b.json
        

        那个 ^^ 在一个变量中捕获了那个长输出 与

        相反
        ps -p 689 -o command
        
        COMMAND
        /opt/conda/bin/python -m ipykernel_launcher -f /root/.local/share/jupyter/runtim
        

        因为我是在 Docker jupyter notebook 上尝试这个,所以我当然需要运行这个 ..

        !foo=$(ps -p 689 -o command); echo "$foo"
        

        令人惊讶的是,jupyter notebooks 甚至可以让你执行!但是很高兴能帮我找到占满我所有记忆的有问题的笔记本=D

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-14
          相关资源
          最近更新 更多