ps axuwfw 返回什么?

man*_*m-n 0 linux bash grep ps tmux

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

ps axuwfw

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

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

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

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

use*_*686 6

ps axuwfw
Run Code Online (Sandbox Code Playgroud)

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

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

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

但是,如果您在那里看到进程,请检查它们的“STAT”字段 - 如果显示Z,则该进程已退出但其父进程尚未“收割”它;这个过程是一个“僵尸”。这通常表明父进程有轻微错误,或者已挂起/崩溃。

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

ps axuwfw | grep -v grep | grep -i screen
Run Code Online (Sandbox Code Playgroud)

|是一个管道。它将一个命令的输出重定向到另一个命令的输入。这应该更明显地表明,以上不仅仅是一个奇怪的魔法命令;它是连接的三个命令。

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

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

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

    (当然,有更好的工具,比如pgrep -alf screen,但很多人仍然使用这种ps|grep|grep…管道,因为它很容易结合只知道psgrep。)

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

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

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

“以上两个命令在示例中从这里返回 431 和 7……”

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

幻灯片的作者没有包含完整的输出(这并不真正相关);他们只将总数作为汇总,表明“屏幕”用户比“tmux”用户多 60 倍。

如果您希望命令实际为您计算行数,您可以 a) 将-c(count) 选项添加到最后一个 grep…命令,或 b) 通过| wc -l. (两者都有效。)


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


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

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