ps:输出修饰符与输出格式控制

ps:输出修饰符与输出格式控制

的联机帮助页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
...

什么是输出修饰符意思是?在 的联机帮助页中ps-j-f-o列在 , 下OUTPUT FORMAT CONTROL,而不是OUTPUT MODIFIERS

一般来说,与输出格式控制选项相比,如何使用输出修饰符?

输出修饰符是选项还是参数?

答案1

这似乎是一个误导性的错误消息。

如果你查看procps源代码,文件common.h290号线:

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

-jformat_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

这里输出显示为层次结构。

相关内容