Назад | Перейти на главную страницу

«Ps -ew» не будет отображать широкий вывод

Он показывает только первые 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 по сути аналогичен приведенному выше примеру.