ps axuwfw 返回什么?

ps axuwfw 返回什么?

在 Linux 上运行以下命令时,我得到了奇怪的输出,包括我的旧 makefile 输出和进程树

ps axuwfw

另外,以下命令有什么用处以及它是如何工作的?

ps axuwfw | grep -v grep | grep -i screen

ps axuwfw | grep -v grep | grep -i tmux

上述两个命令在示例中返回 431 和 7这里,但在我的系统中,它返回一些以前运行过的旧 makefile 输出和截断的进程树。

答案1

ps axuwfw

这是几个 BSD 风格选项的组合(所有选项都在手册页中man ps):

  • a:包括其他用户的进程
  • x:包括没有终端的进程
  • u:显示面向用户的信息字段
  • w:宽输出(132 列而不是 80 列)
  • f:“森林”:进程的树形视图
  • w:更宽的输出(没有任何限制)

换句话说,它只是显示当前正在运行的进程。

然而,如果你看到老的进程,检查它们的“STAT”字段——如果它显示Z,则表示该进程已退出,但其父进程尚未“收割”它;该进程是“僵尸”。这通常表示父进程存在轻微错误,或已挂起/崩溃。

另请注意,并非所有操作系统都接受这些选项。在 SysV 上,可能是ps -ef

ps axuwfw | grep -v grep | grep -i screen

|一个管道。它将一个命令的输出重定向到另一个命令的输入。这应该更明显地表明,上面的命令不仅仅是一个奇怪的神奇命令;它是三个相互关联的命令。

  1. 第一个命令,,ps axuwfw已经解释过了。

  2. grep,用于搜索/过滤文本。grep foo只会打印包含文本“foo”的输入行。使用选项-v,第二个命令 – grep -v …– 执行相反的操作 – 打印不包含文本“foo”的行不是匹配。(再次参考man grepgrep --help。)

    此特定调用是必要的,因为管道中的所有进程都同时运行,因此将ps…显示所有grep…进程 - 并且ps axu | grep screen会导致grep…除了所需的条目之外还匹配其自己的条目。因此grep…添加了第二个以明确忽略其中包含“grep”的行。

    (当然,还有更好的工具,比如pgrep -alf screen,但许多人仍然使用这种ps|grep|grep…管道,只是因为只需了解ps和就可以轻松结合起来grep。)

  3. 第三个命令grep -i screen,再次仅提取包含“screen”的行。

    正如手册页和grep --help输出中所述,添加该-i选项会使搜索不区分大小写,因此它还会输出其中包含“Screen”或“SCREEN”的行。

简而言之,完整的命令只是打印那些ps…谈论“屏幕”程序的行。

“上面的两个命令在此处的示例中返回 431 和 7...”

它们不会。它们返回有关名为“screen”或“tmux”的进程的信息。示例中给出的数字是数数返回的进程数。

幻灯片的作者没有包含完整的输出(这实际上并不相关);他们只包含了总数作为摘要,表明“screen”用户比“tmux”用户多 60 倍。

如果你希望命令真正为你计算行数,你可以 a) 将-c(count) 选项添加到最后的 grep…命令,或者 b) 通过管道传输| wc -l。 (两种方法均可。)


“…但在我的系统中它返回的是垃圾。”


它返回一些以前运行过的旧 makefile 输出和截断的进程树

这不是垃圾——这正是您要求的输出。

相关内容