"ps -ew" не будет отображать широкий вывод

Он показывает только первые 15 символов из /proc/pid/stat. Но "ps -w pid" показывает широкий вывод. Зачем? Это ошибка? Благодарю.

4 ответа

Вы можете сделать это, явно перечислив поля:

ps -ew -o pid,tty,time,cmd

Или в стиле BSD:

ps awxo pid,tty,time,cmd

Вероятно, полезно в сценарии, не очень полезно для командной строки. Если вы не сделаете псевдоним.

Я не думаю, что "широкий вывод" означает то, что вы хотите. Я создал скрипт с именем 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 -efww,

В Debian/Ubuntu это дает вам:

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

Спасибо за все комментарии выше, которые просвещают меня.

ps -ew не содержит параметров BSD, поэтому я получаю вывод по умолчанию, который получает имя процесса из /proc/<pid>/stat, что не более 15 символов.

-w опция действительно действует, она показывает широкий вывод. Если я уменьшу окно очень узко, ps -ew постараюсь обернуть строки так, чтобы я все еще получил полные 15 символов в столбце COMMAND. Но без -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, чего не сказано на странице man:

   if((tmp>='0') && (tmp<='9'))   return ARG_PID;
   ......
   case ARG_PID:
          prefer_bsd_defaults = 1;
          err = parse_trailing_pids();

Так ps -w <pid> отобразит вывод в стиле BSD, в котором вместо имени исполняемого файла (CMD) будут отображаться аргументы команды (COMMAND). -w в действительности аналогичен приведенному выше примеру.

Другие вопросы по тегам