-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
.
Вообще говоря, как используются модификаторы вывода по сравнению с опциями управления форматом вывода?
Являются ли модификаторы вывода опциями или аргументами?
Кажется, сообщение об ошибке вводит в заблуждение.
Если вы посмотрите на исходный код 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
Здесь вывод отображался в виде иерархии.