【问题标题】:How to run shellscript parallely like java thread如何像java线程一样并行运行shell脚本
【发布时间】:2015-03-28 15:53:57
【问题描述】:

您好,我有一个脚本 mainscript.sh 在主脚本中,我有多个智利脚本。

child1.sh  
child2.sh  
child3.sh 
rm -rf /home/bdata/batch/* 

我正在运行我的 mainscript.sh,它将并行运行所有子作业。

ma​​inscript.sh

child1.sh &
child2.sh &
child3.sh &
rm -rf /home/bdata/batch/*   

第四条语句在完成所有执行之前运行。

在并行完成以上 3 个脚本后,有什么方法可以控制最后一行的执行。

【问题讨论】:

  • 在每个脚本的末尾添加 &。如果您想不考虑终端运行,请选择 nohup 选项。
  • Perl 支持多线程和分叉,如果这是一个可接受的解决方案。我知道它不是 shell,但几乎无处不在:stackoverflow.com/questions/26296206/…
  • @Kate -- 这行得通,但问题是我想在所有其他 shell 脚本完成执行后运行最后一行。在我的情况下,它是在完成所有脚本之前删除我的文件夹

标签: shell unix sh


【解决方案1】:

只需告诉 shell 等到孩子都死了:

child1.sh &
child2.sh &
child3.sh &
wait
rm -rf /home/bdata/batch/*  

【讨论】:

    【解决方案2】:

    这是一种解决方案:

    #!/bin/bash
    ./child1.sh &
    ./child2.sh & 
    ./child3.sh &
    

    使用./ 或脚本的完整路径。

    如果命令被控制操作符& 终止,shell 在子 shell 的后台执行命令。外壳可以 不等待命令完成,返回状态为0。如果要在退出脚本之前执行所有子脚本,请在末尾添加wait(如下@Mark Setchell 所写)。

    【讨论】:

    • 如果您想等到所有孩子都完成后再退出脚本,请在末尾添加wait
    猜你喜欢
    • 2015-09-09
    • 1970-01-01
    • 2013-08-14
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2023-03-29
    相关资源
    最近更新 更多