Он показывает только первые 15 символов из / proc / pid / stat. Но "ps -w pid" показывает широкий вывод. Зачем? Это ошибка? Спасибо.
Я не думаю, что «широкий выход» означает то, что вы хотите. Я создал сценарий под названием 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
попытаюсь обернуть строки так, чтобы в столбце КОМАНДА были все 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>
, Я нахожу ответ от parser.c
исходного кода procps. Это подразумевает вывод в стиле BSD, если есть аргументы PID, о чем не говорится на странице руководства:
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
по сути аналогичен приведенному выше примеру.