【发布时间】:2017-01-11 18:01:56
【问题描述】:
我是类 unix 的新手。我遇到了一个奇怪的问题,我真的无法通过搜索找到答案。
#!/bin/bash
me=`basename "$0"`
echo $(ps -e | grep "$me" | wc -l)
ps -e | grep "$me" | wc -l
执行该 bash 脚本后,echo 显示 2,而 ps 仅显示 1,这正是我想要的。这怎么可能发生?为什么 echo 显示了一个额外的进程?
【问题讨论】:
-
$()创建一个子shell——你的shell的一个分叉副本。因此,当您在运行echo $(ps -e | grep "$me" | wc -l)时,实际上还有更多进程正在运行与您的表达式匹配。 -
也就是说,通过
ps搜索是绝对不好的做法,不应该用于任何类型的自动化使用。虽然有诸如pgrep之类的工具可以解决一些注意事项,但如果您的目的是确定程序是否已经在运行,那么还有更好的方法来做到这一点。 -
欢迎来到 StackOverflow!请阅读用户指南,了解如何在发布问题之前提出一个好问题 (stackoverflow.com/help/how-to-ask) 谢谢