ps: модификаторы вывода против управления форматом вывода

В manpage ps

-j Формат заданий.

-fВыполнить полноформатный листинг.

-o format Формат, определяемый пользователем.

$ ps -j -o ppid,sid
error: can not use output modifiers with user-defined output

$ ps -f -o ppid,sid
 PPID   SID
 3046 23122
 3046  1002
 1002  1002
 3046 13961
...

Что означает модификаторы вывода? В manpage ps, -j, -f и -o перечислены под OUTPUT FORMAT CONTROL, вместо OUTPUT MODIFIERS.

Вообще говоря, как используются модификаторы вывода по сравнению с опциями управления форматом вывода?

Являются ли модификаторы вывода опциями или аргументами?

0
28.02.2016, 14:13
1 ответ

Кажется, сообщение об ошибке вводит в заблуждение.

Если вы посмотрите на исходный код procps , файл common.h строка 290 :

extern unsigned        format_modifiers; /* -c -j -y -P -L... */

-j подразумевает format_modifiers флаг необходимо установить , которые вызывают ошибку при использовании с пользовательским выводом :

if(format_list){
  if(format_flags) return "Conflicting format options.";
  if(format_modifiers) return "Can't use output modifiers with user-defined output";
  if(thread_flags&TF_must_use) return "-L/-T with H/m/-m and -o/-O/o/O is nonsense";
  return NULL;
}

Сообщение типа Невозможно использовать модификаторы формата вывода с определяемым пользователем выводом ] было бы лучше.


FreeBSD ps не имеет этой проблемы, параметр -j заставляет ps печатать информацию о пользователе , pid, ppid, pgid, sid, jobc, state, tt, time и command . Добавление -o делает вывод агрегированным:

$ ps -j -o ppid,sid
USER     PID PPID PGID  SID JOBC STAT TT     TIME COMMAND          PPID  SID
cuonglm 1196 1195 1196 1196    0 Ss    0  0:00.02 -sh (sh)         1195 1196
cuonglm 1233 1196 1233 1196    1 R+    0  0:00.00 ps -j -o ppid,si 1196 1196

Модификаторы вывода управляют тем, как отображается информация, а формат вывода контролирует , какая информация отображается.

Примером параметров s является элемент управления форматом вывода, потому что он добавил информацию о сигнале процесса в вывод ps :

$ ps s
  UID   PID          PENDING          BLOCKED          IGNORED           CAUGHT STAT TTY        TIME COMMAND
 1000 12831 0000000000000000 0000000000000002 0000000000384004 0000000188013003 Ss   pts/1      0:00 zsh
 1000 13067 0000000000000000 0000000000000000 0000000000000000 0000000073d3fef9 R+   pts/1      0:00 ps s

f - это модификатор вывода, потому что он изменился как отображался вывод:

$ ps f
  PID TTY      STAT   TIME COMMAND
12831 pts/1    Ss     0:00 zsh
13238 pts/1    R+     0:00  \_ ps f

Здесь вывод отображался в виде иерархии.

1
28.01.2020, 02:49

Теги

Похожие вопросы