我有一个剧本。
猫/root/test/ddd.sh
#!/bin/bash
s=/root/test/ddd.sh
ps -ef | grep $s | grep -v grep
result=$(ps -ef | grep $s | grep -v grep | wc -l)
echo $result
当我执行它时,结果很奇怪,它表明有两行匹配。
[root@l2 test]# /root/test/ddd.sh
root 15361 15032 0 09:52 pts/18 00:00:00 /bin/bash /root/test/ddd.sh
2
那是因为您正在运行子外壳程序。也就是说,该$(...)
片段会导致bash变为fork
,从而创建两个(几乎)相同的过程。同样,我基本上是指除进程ID,父进程ID,的返回码之外的所有内容fork
,而我什么也想不起。但有一点确实保持相同可以肯定的是命令行。它们都将是“ /bin/bash /root/test/ddd.sh
”。因此,在中result=$(...)
,将恰好有一个匹配的额外过程。
例如,您可以通过删除| wc -l
末尾的代码来查看该代码$(...)
,并使其更易读,将echo的参数用引号引起来:
result="$(ps -ef | grep $s | grep -v grep)"
echo "$result"
在这里,您将看到有两个引用,其中一个的PPID是另一个的PID,显示了父子关系。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句