【发布时间】:2016-01-02 14:46:32
【问题描述】:
我有一个 bash 脚本 (ScreamDaemon.sh),其中添加了一个检查它的示例尚未运行。
numscr=`ps aux | grep ScreamDaemon.sh | wc -l`;
if [ "${numscr}" -gt "2" ]; then
echo "an instance of ScreamDaemon still running";
exit 0;
fi
通常,如果没有其他脚本正在运行,ps aux | grep ScreamDaemon.sh | wc -l 应该返回 2(它应该找到自己和 grep ScreamDaemon.sh),但它返回 3。
所以,我尝试分析发生了什么,并在添加一些回声后看到:
我在脚本中添加了几行
ps aux | grep ScreamDaemon.sh
ps aux | grep ScreamDaemon.sh | wc -l
str=`ps aux | grep ScreamDaemon.sh`
echo $str
numscr=`ps aux | grep ScreamDaemon.sh | wc -l`;
echo $numscr
有一个输出:
pamela 27894 0.0 0.0 106100 1216 pts/1 S+ 13:41 0:00 /bin/bash ./ScreamDaemon.sh
pamela 27899 0.0 0.0 103252 844 pts/1 S+ 13:41 0:00 grep ScreamDaemon.sh
2
pamela 27894 0.0 0.0 106100 1216 pts/1 S+ 13:41 0:00 /bin/bash ./ScreamDaemon.sh pamela 27903 0.0 0.0 106100 524 pts/1 S+ 13:41 0:00 /bin/bash ./ScreamDaemon.sh pamela 27905 0.0 0.0 103252 848 pts/1 S+ 13:41 0:00 grep ScreamDaemon.sh
3
我还尝试在 `ps aux | 中添加 sleep 命令。 grep ScreamDaemon.sh; sleep 1m` 并从并行终端查看 ps aux|grep ScreamDaemon.sh 显示了多少实例:
[pamela@pm03 ~]$ ps aux | grep ScreamDaemon.sh
pamela 28394 0.0 0.0 106100 1216 pts/1 S+ 14:23 0:00 /bin/bash ./ScreamDaemon.sh
pamela 28403 0.0 0.0 106100 592 pts/1 S+ 14:23 0:00 /bin/bash ./ScreamDaemon.sh
pamela 28408 0.0 0.0 103252 848 pts/9 S+ 14:23 0:00 grep ScreamDaemon.sh
看来, str=`ps 辅助 | grep ScreamDaemon.sh` 与之相反 ps辅助| grep ScreamDaemon.sh 找到了 ScreamDaemon.sh 的两个实例,但为什么呢? ScreamDaemon.sh 的这个额外副本来自哪里?
这是 pstree -ap 命令的输出
│ ├─sshd,27806
│ │ └─sshd,27808
│ │ └─bash,27809
│ │ └─ScreamDaemon.sh,28731 ./ScreamDaemon.sh
│ │ └─ScreamDaemon.sh,28740 ./ScreamDaemon.sh
│ │ └─sleep,28743 2m
【问题讨论】:
-
它从搜索结果中排除了 grep ScreamDaemon.sh,但它仍然找到 2 个实例而不是 1跨度>
-
你能输入并粘贴
pstree -ap的输出吗? (你可以剪掉不需要的线条) -
找不到如何将其以可读形式放在这里的方法:(
-
所以,像这样:
sshd,27806->sshd,27808->bash,27809->ScreamDaemon.sh,28731 ./ScreamDaemon.sh->ScreamDaemon.sh,28740 ./ScreamDaemon.sh->sleep,28743 2m -
把这个放在原文中