我有一个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; 睡眠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 aux | grep ScreamDaemon.sh
与 ps aux 相反 |
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
当隐式创建子外壳的任何构造都在起作用时,这是典型的。例如,在bash中:
echo foo | bar
…创建一个新的shell分叉副本以运行echo
,并使用其自己的ps
实例。类似地:
( bar; echo done )
…创建一个新的子shell,让该子shell运行外部命令bar
,然后让该子shell执行echo
。
类似地:
foo=$(bar)
…创建一个用于命令替换的子shell,bar
在其中运行(可能会exec
“执行命令并使用该子shell,但这不能保证”),然后将其输出读入父级。
现在,这如何回答您的问题?因为
result=$(ps aux | grep | wc)
… 在subshell中 运行该ps
命令,后者本身会创建一个额外的bash实例。 __
使用锁定文件。
请注意,我 强烈 建议您使用flock
基于-的变体。
问题内容: 阅读mozilla文档后,我发现了这一点: 在全局执行上下文中(在任何函数之外),这指的是全局对象,无论是否处于严格模式下。 在玩了一点示波器之后,我发现在node.js REPL中… 但是当我用同一行创建脚本时… 是否有一个原因?还是一个错误? 问题答案: 节点是全局的。文件中的代码位于“模块”中,它实际上只是一个函数。 您的代码文件变成了如下所示的简化示例: 请注意,它是使用来执行
我有这个正则表达式:https://regex101.com/r/vxHtzh/1 我有四场比赛。 但是对于我简单的java代码,我有不同的输出。 输出: 我哪里做错了?
前言:来自Microsoft论坛的交叉链接:http://social.msdn.microsoft.com/forums/office/en-us/47d1167b-24d0-43ed-b28b-21d8d82570a1/syncfolderhierarchy-differs-better-exchange-versions?forum=exchangesvrdevelopment 我一直在测试
问题内容: 我有一个大问题。我使用此C#函数对消息进行编码: 在Java方面,我使用以下代码段: 我的消息是:阻止|注释|文本!£$%&/()=?^€> <{}ç°§;:_-。,@#ùàòè+ 我有这个结果: 你能帮我吗??谢谢… 问题答案: 我的猜测是您似乎正在将ASCII字节与Latin1字节进行比较。尝试切换 对此 那可能会解决您的问题。 (或切换C#以使用Latin1) 程序中发生的事情是
问题内容: 我正在尝试构建一个应用程序,该应用程序使用流音频输入(例如:麦克风中的一条线),并使用IBM Bluemix(Watson)进行语音转文本。 我简要修改了此处找到的示例Java代码。此示例发送一个WAV,但是我发送的是FLAC …这[无关]不相关。 结果很差,非常差。这是使用Java Websockets代码时得到的: 现在,将上面的结果与下面的结果进行比较。这些是发送相同内容但使用c
问题内容: 我有两个不同的程序,分别希望在Python和Java中使用Murmur3散列相同的字符串。 Python版本2.7.9: 给出79267961763742113019008347020647561319L。 Java是Guava 18.0: 给出字符串“ 6778ad3f3f3f96b4522dca264174a23b”,转换为BigInterger给出1375370730566806