当我在使用 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
使用
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 ps
。 ww
标志设置无限宽度。
-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/
less
或 most
,因为 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)
more
和 pg
的行始终换行。
当
ps aux
在管道中使用时,w
选项是不必要的,因为 ps
仅在输出到终端时使用屏幕宽度。
简单又完美:
ps -efww
不会截断行
只要把它扔到猫身上,猫就会自动换行
ps aux | cat
传递几个
w
将忽略显示宽度。
如果您手动指定输出格式,您还需要确保输出字段列表中的
args
选项为last,否则它将被截断。
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]
您可以设置输出格式,例如仅查看命令和进程ID。
ps -eo pid,args
有关更多输出格式,请参阅 ps 的手册页。或者,您可以使用
-w
或 --width n
选项。
如果所有其他方法都失败了,这里有另一个解决方法,(只是为了查看你的长命令)
awk '{ split(FILENAME,f,"/") ; printf "%s: %s\n", f[3],$0 }' /proc/[0-9]*/cmdline
很抱歉参加聚会迟到,但刚刚找到了解决问题的方法。
这些行被截断,因为 ps 坚持使用 $COLUMNS 的值,即使当时输出不是屏幕。这是一个错误,恕我直言。但很容易解决,只需制作 ps 认为您有一个超宽屏幕,即在 ps 命令期间将 COLUMNS 设置为高。一个例子:
$ ps -edalf # truncates lines to screen width
$ COLUMNS=1000 ps -edalf # wraps lines regardless of screen width
我希望这对某人仍然有用。所有其他想法似乎都太复杂了:)
其他人提到的截断证据,(个人例子)
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 笔记本上尝试这个,所以我当然需要运行它..
!foo=$(ps -p 689 -o command); echo "$foo"
令人惊讶的是,jupyter 笔记本甚至可以让您执行此操作!但很高兴能帮助找到占用我所有记忆的有问题的笔记本=D
如果您使用 ps aux 的管道
grep
查找要查找的命令,它会自动换行文本。我在这里使用了很多其他答案,但有时如果您正在寻找特定的东西,最好只使用 grep
并且您知道它会换行。
例如
ps aux | grep ffmpeg
.
我找到了这个答案,这对我来说是很重要的,因为上面的答案都不起作用
https://unix.stackexchange.com/questions/91561/ps-full-command-is-too-long
基本上,内核限制了我的命令行。
在带有 busybox 的 docker 容器中,以上内容都不适合我。我用的是:
$ cat /proc/<PID>/cmdline | tr \\0 ' '
只是
ps ww
或 ps -ww
例如,执行
pa auxww
或 ps aux -ww
而不是执行 ps aux
来源:
OUTPUT FORMAT CONTROL
w Wide output. Use this option twice for unlimited width.
-w Wide output. Use this option twice for unlimited width.