在我的centos7.4服务器上,如果运行
bash -c "python -m SimpleHTTPServer"
pstree -sp 10784 (PID of python server)
将会呈现
systemd(1)───sshd(922)───sshd(11595)───sshd(11597)───bash(11598)───python(11617)
与
bash -c "python -V && python -m SimpleHTTPServer"
systemd(1)───sshd(922)───sshd(11595)───sshd(11597)───bash(11598)───bash(11638)───python(11640)
为什么在第二个命令中创建子shell?
解决方法:
第二个命令使用子shell来处理&&运算符 – 它需要等待SIGCHLD第一个命令终止,然后决定是否需要运行第二个命令.
在第一种情况下 – 这似乎发生:
Bash启动并发现它需要运行一个简单的字符串.作为优化,然后exec
s命令首先没有分叉,子shell被python命令替换.
对于第二种情况,此优化不起作用,并且bash forks运行python -V命令并等待结果.收到退出该命令的SIGCHLD后,它将运行第二个命令(并且不应用优化以防止额外的fork
)
见1370 here号线
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。