ps –ax | 是什么意思? grep $$ > catch 做什么?

ps –ax | 是什么意思? grep $$ > catch 做什么?

有什么ps –ax | grep $$ > catch作用?我想知道这一行执行什么。当我运行代码时,它不会在输出中添加任何内容。

答案1

该命令ps -ax 显示您以及其他用户的进程。

grep匹配与正则表达式匹配的行。在本例中,正则表达式为 $$,shell 将其扩展为当前 shell 的进程 ID。

右尖括号 ( >) 将输出重定向到名为catch.如果文件存在,则首先将其截断(清空),否则将创建该文件。

答案2

这不是一个好的做事方式。你要求 ps 显示:

  • 您的所有进程(默认)
  • plus - 所有其他有 tty 的进程(一个选项)
  • plus - 所有其他没有 tty 的进程(x 选项)
  • grep然后 - 使用步骤 1 中的单个进程进行过滤

简单的事情ps -h $$ > catch就可能做到。ps将您感兴趣的进程的 PID 作为命令行选项,因此如果您知道自己想要什么,请直接指定它,而不是希望 grep 能够工作。该-h选项是删除标题行。

但是,您必须非常小心脚本中的 $$,因为它的意思是“这个 shell”,但它的概念取决于调用的时间和地点。

考虑这两个命令:

$ sh -c "ps -ax | grep $$"
   3802 pts/0    Ss     0:11 bash
3658110 pts/0    S+     0:00 sh -c ps -ax | grep 3802
3658112 pts/0    S+     0:00 grep 3802
$ sh -c 'ps -ax | grep $$'
3658142 pts/0    S+     0:00 sh -c ps -ax | grep $$
3658144 pts/0    S+     0:00 grep 3658142

脚本总是做这种事情,看看第一个有 3 行,但第二个只有 2 行?这是因为第一个我们正在解决,$$然后运行脚本并找出“主”shell,但第二个我们正在以另一种方式进行,当然它具有不同的子 shell 的 PID 并且与 3802 不匹配父母。

哪一个是正确的?这取决于您想要做什么。如果我正在寻找主 shell,我通常会首先将其设置为一个变量,这样很明显这就是我想要的。

相关内容