使用 ps ef 还是 ps -ef?

使用 ps ef 还是 ps -ef?

ps ef我发现和之间的输出有所不同ps -ef。区别是什么?两个命令都正确吗?还是哪个命令更可取?

答案1

man ps说:

This version of ps accepts several kinds of options:

1   UNIX options, which may be grouped and must be preceded by a
    dash.
2   BSD options, which may be grouped and must not be used with a
    dash.
3   GNU long options, which are preceded by two dashes.

因此,ef使用 BSDef选项,并-ef使用 Unix-e-f选项。它们是不同的(分别是 和SIMPLE PROCESS SELECTION部分):OUTPUT FORMAT CONTROLOUTPUT MODIFIERS

   -e     Select all processes.  Identical to -A.
   -f     Do full-format listing. This option can be combined with many
          other UNIX-style options to add additional columns.  It also
          causes the command arguments to be printed.  When used with
          -L, the NLWP (number of threads) and LWP (thread ID) columns
          will be added.  See the c option, the format keyword args, and
          the format keyword comm.

   e      Show the environment after the command.

   f      ASCII art process hierarchy (forest).

显然,您没有使用选项选择所有流程ef,而是使用默认的流程列表以及一些额外的格式:

By default, ps selects all processes with the same effective user ID
(euid=EUID) as the current user and associated with the same terminal
as the invoker.  It displays the process ID (pid=PID), the terminal
associated with the process (tname=TTY), the cumulated CPU time in
[DD-]hh:mm:ss format (time=TIME), and the executable name (ucmd=CMD).
Output is unsorted by default.

The use of BSD-style options will add process state (stat=STAT) to
the default display and show the command args (args=COMMAND) instead
of the executable name.  You can override this with the PS_FORMAT
environment variable. The use of BSD-style options will also change
the process selection to include processes on other terminals (TTYs)
that are owned by you; alternately, this may be described as setting
the selection to be the set of all processes filtered to exclude
processes owned by other users or not on a terminal.

您应该使用哪一个?您想对输出做什么?

另请参阅EXAMPLES部分(确实列出得相当突出,并且根本-ef不使用 BSD选项):e

EXAMPLES

   To see every process on the system using standard syntax:
      ps -e
      ps -ef
      ps -eF
      ps -ely

   To see every process on the system using BSD syntax:
      ps ax
      ps axu

   To print a process tree:
      ps -ejH
      ps axjf

答案2

请参阅man ps(您的系统上的一个,在线可能有不同的解释)。

This version of ps accepts several kinds of options:

   1   UNIX options, which may be grouped and must be preceded by a dash.
   2   BSD options, which may be grouped and must not be used with a dash.
   3   GNU long options, which are preceded by two dashes.

因此,第一种方法(ps ef)是 BSD 风格,手册页继续介绍

使用 BSD 风格的选项将把进程状态 (stat=STAT) 添加到默认显示并显示命令参数 (args=COMMAND) 而不是可执行文件名称。您可以使用 PS_FORMAT 环境变量覆盖此设置。使用 BSD 样式选项还将更改进程选择以包括您拥有的其他终端 (TTY) 上的进程;或者,这可以描述为将选择设置为所有进程的集合,这些进程经过筛选以排除其他用户拥有的进程或不在终端上的进程。当选项在下面被描述为“相同”时,不会考虑这些影响,因此 -M 将被视为与 Z 相同,依此类推。

因此这两个命令都是有效的,但它们显示的信息并不相同。

相关内容