【问题标题】:What starts new subshell in Bash?什么开始在 Bash 中创建新的子外壳?
【发布时间】:2011-07-04 18:07:27
【问题描述】:

除了管道和命令替换之外,Bash 中是否存在启动新子 shell 的操作?

【问题讨论】:

标签: bash shell process


【解决方案1】:

将命令链放入括号 (( ... )) 也会启动一个新的子 shell。

( cd /tmp ; pwd ) ; pwd

【讨论】:

    【解决方案2】:

    每个运行的 shell 脚本实际上都是父 shell 的一个子进程(子进程)。

    shell 脚本本身可以启动子进程。这些子shell 让脚本进行并行处理,实际上是同时执行多个子任务。

    假设你有脚本test.sh。运行后如果你运行命令

    ps -ef|grep -i test.sh
    

    你会看到它以不同的 PID 运行

    一般来说,脚本中的外部命令会派生出一个子进程/子shell

    【讨论】:

    • 子shell和子进程不是一回事。管道右侧的grep 由子shell 启动。左边不是。因此,如果您要执行cd .. | pwd,您会看到目录更改。如果你做了echo | cd ..; pwd,你就不会。此外,cd 是一个内置的 shell,所以它永远不是子进程,但仍然在子 shell 中。子进程是一个 fork-exec。在子 shell 中运行的子进程的行为类似于 fork-fork-exec。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多