代码之家  ›  专栏  ›  技术社区  ›  TSG

Bash分叉子shell

  •  0
  • TSG  · 技术社区  · 8 年前

    我有一个bash脚本,其中我希望在分叉进程中运行一些不相关的命令。这些命令只能在分叉进程中运行,而其他命令只能在父进程中运行。

    echo "I am parent statement 1"
    ( echo "I am child statement 1"; echo "I am child statement 2"; sleep 30) &
    echo "I am parent statement 2"
    

    在本例中,父shell是否只输出“父”语句,子shell是否只回显“子”语句?或者子语句返回时是否会回显父语句2?

    同样,父母是否会等孩子(睡觉30)?还是家长退出,孩子继续运行30秒?

    1 回复  |  直到 8 年前
        1
  •  0
  •   merlin2011    8 年前

    每个进程将只运行自己的语句。

    如果稍微修改脚本,可以进行一个实验,显示子对象比父对象活得长。

    #!/bin/bash
    
    echo "I am parent statement 1"
    ( echo "I am child statement 1"; echo "I am child statement 2"; sleep 30) &
    jobs -l
    echo "I am parent statement 2"
    echo $$
    

    如果运行脚本,然后执行 ps aux | grep <pid> 对于父母和孩子,您将看到父母已经去世,而孩子仍然活着。