#!/bin/bash

p=$(/bin/ps -ef grep -w “$0” grep -v ‘grep’ wc -l)

echo “$p”

得到的结果居然是2 通过whille true循环抓进程才发现,这个脚本执行过程中产生了子进程! 因此得到结果是大于1的. 为了避免这个情况,可以将脚本改造一下: #!/bin/bash

p=ps -ef|grep "$0"|grep -v grep

echo $p|wc -l 这样得到的结果就是1.原因是这里的p获取的进程信息实际上也是两个,但是两个输出在一行中,所以最后去wc得到的结果是1. 这里更坑,将echo $p改为echo “$p”,居然结果又成了2! 综合对比一下: 结果是: 啊,原来echo $p和echo “$p”得到的结果是不一致的!加上双引号的会分行. 好,那就测试到底,看我们平时完全不在意的小习惯是否有大影响. 结果: 进一步测试发现,这个子进程其实就是在定义p的时候产生的,如果不定义p,直接ps得到进程数,则不会产生子进程 #!/bin/bash

ps -ef|grep “$0”|grep -v grep|wc -l 以上的执行过程中不会产生子进程. 结论:

  1. 脚本内的传参会产生子进程
  2. $p会将结果在一行展示,而”$p”则会分割行 以上问题只存在于脚本自己判断同名进程时会有,需要注意.