天坑系列bash之命令执行上下文是否为子进程

写了一段脚本,如果系统有flock命令,就用flock来加锁,否则用ps来查看是否已经有本进程在运行,以保障其单例性。

这里用了:

来获取进程个数,判断的时候,却用的是$count -gt 2而不是$count -gt 1?

这个问题,剥离出来,是wc -l命令执行的上下文是当前脚本进程还是其子进程。

你在脚本里,这么调用,显示的是 1 :

你想获取变量值的时候,如下,count却是 2:

因为,$()等执行上述命令时,又会fork一个子进程来执行,在,$()等内部显示类似这样:

所以,上面的$count,如果在脚本你们要判断脚本名称的进程是否存在,条件为大于2而不是大于1。
PDF下载

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">