|
|

楼主 |
发表于 2008-8-9 16:41:21
|
显示全部楼层
Post by zhllg;1884245
对比一下这两个
sh -c 'exec /bin/echo & ls -ld /tmp'
sh -c 'exec /bin/echo ; ls -ld /tmp'
我猜测你的疑问在于为什么第一个例子里ls仍然得到了执行
原因是:
首先,和exec /bin/echo ; ls -ld /tmp一样,在exec /bin/echo & ls -ld /tmp里exec /bin/echo和ls也是两个命令
但不同在于,当shell在遇到&的时候,会首先开启一个子shell,然后再执行命令(exec /bin/echo),所以这里被替换的是这个子shell。然后父shell会再执行ls
你可以看看并比较一下这两个命令
sh -c 'exec ps ; ps'
sh -c 'exec ps & ps' 这里还有个不理解的,你说shell遇到&会先开一个shell再执行命令,那我之前的那个例子里命令只有(urxvt &) 那按理来说pstree的时候应该看到urxvt前面还应该有个bash就是向下面这样- bash(7018)─┬─pstree(8191)
- └─sh(8176)─┬─bash(xxxx)───urxvt(8177)───bash(8186)
- └─xterm(8178)───bash(8182)
复制代码
但是实际没有阿
所以我认为当有&存在时那个exec就被无视了,而不是产生一个subshell后再被exec去替换。 |
|