linux – 当“bash -c”会导致子shell创建?

在我的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启动并发现它需要运行一个简单的字符串.作为优化,然后execs命令首先没有分叉,子shell被python命令替换.

对于第二种情况,此优化不起作用,并且bash forks运行python -V命令并等待结果.收到退出该命令的SIGCHLD后,它将运行第二个命令(并且不应用优化以防止额外的fork)

见1370 here号线

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...