-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
...
什么是输出修饰符意思是?在 的联机帮助页中ps
,-j
、-f
和-o
列在 , 下OUTPUT FORMAT CONTROL
,而不是OUTPUT MODIFIERS
。
一般来说,与输出格式控制选项相比,如何使用输出修饰符?
输出修饰符是选项还是参数?
答案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;
}
像这样的消息无法使用输出格式修饰符具有用户定义的输出会更好。
FreeBSDps
没有这个问题,-j
选项 Causeps
打印有关user, pid, ppid, pgid, sid, jobc, state, tt, time, and 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
这里输出显示为层次结构。