linux-Bash:内联执行返回重复的“进程”.为什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux-Bash:内联执行返回重复的“进程”.为什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1362字,纯文字阅读大概需要2分钟。
内容图文
bash:4.3.42(1)-发行版(x86_64-pc-linux-gnu)
执行以下脚本:
# This is myscript.sh
line=$(ps aux | grep [m]yscript) # A => returns two duplicates processes (why?)
echo "'$line'"
ps aux | grep [m]yscript # B => returns only one
输出:
'tom 31836 0.0 0.0 17656 3132 pts/25 S+ 10:33 0:00 bash myscript.sh
tom 31837 0.0 0.0 17660 1736 pts/25 S+ 10:33 0:00 bash myscript.sh'
tom 31836 0.0 0.0 17660 3428 pts/25 S+ 10:33 0:00 bash myscript.sh
为什么内联执行的ps-snippet(A)返回两行?
解决方法:
摘要
这将创建一个子外壳,因此两个进程正在运行:
line=$(ps aux | grep [m]yscript)
这不会创建子外壳.因此,myscript.sh仅运行一个进程:
ps aux | grep [m]yscript
示范
让我们稍微修改一下脚本,以便将流程和子流程PID保存在变量行中:
$cat myscript.sh
# This is myscript.sh
line=$(ps aux | grep [m]yscript; echo $$$BASHPID)
echo "'$line'"
ps aux | grep [m]yscript
在bash脚本中,$$是脚本的PID,在子shell中未更改.相比之下,当输入子shell时,bash使用子shell的PID更新$BASHPID.
这是输出:
$bash myscript.sh
'john1024 30226 0.0 0.0 13280 2884 pts/22 S+ 18:50 0:00 bash myscript.sh
john1024 30227 0.0 0.0 13284 1824 pts/22 S+ 18:50 0:00 bash myscript.sh
30226 30227'
john1024 30226 0.0 0.0 13284 3196 pts/22 S+ 18:50 0:00 bash myscript.sh
在这种情况下,30226是主脚本上的PID,30227是运行ps aux |的子外壳的PID. grep [m] yscript.
内容总结
以上是互联网集市为您收集整理的linux-Bash:内联执行返回重复的“进程”.为什么?全部内容,希望文章能够帮你解决linux-Bash:内联执行返回重复的“进程”.为什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。