比较运行bash之前和之后的进程列表

时间:2017-07-24 15:07:20

标签: bash makefile ps

尝试在运行测试的bash脚本之前和之后比较进程列表。遇到麻烦,因为ps返回1,我不确定如何比较我之前和之后的情况。

理想情况下,它看起来像这样。原谅粗伪伪代码:

run-tests: 
    ps -x
    export before=$?
    # run tests and scripts
    ps -x 
    export after=$?
    # compare before and after

建议和建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

我假设您想要计算之前和之后正在运行的进程数(您的问题并未过分明确)。如果是这样,你可以将ps传递给wc:

export before=`ps --no-headers | wc -l`

- 编辑---

我重读了这个问题,可能是您正在寻找不同的实际流程。如果是这种情况,那么,您可以捕获变量中的输出并比较它们:

target:
    @ before=$$(ps --no-headers); \
      run test; \
      after=$$(ps --no-headers); \
      echo "differing processes:"; \
      comm -3 <(echo "$before") <(echo "$after")

关于这一点的一些快速说明:我使用\&#39; s连接所有行,如你所提到的那样使用了makefile,变量的范围只是它所在的配方行。定义。通过连接这些行,变量具有整个配方的范围。

我使用了双$$,因为您的原始帖子建议使用makefile,并且makefile $$将扩展为要运行的bash代码中的单个$

在bash中执行var=$(command)会为var

的输出分配command

我使用了特定于bash的<()约定。这使您可以将命令的输出视为文件,而无需实际创建文件。请注意,我在变量周围加上引号 - 这是必需的,否则bash会在扩展变量时忽略换行符。