如何像java线程一样并行运行shellscript
嗨,我有一个脚本mainscript.sh 在主脚本中,我有多个脚本如何像java线程一样并行运行shellscript,shell,unix,sh,Shell,Unix,Sh,嗨,我有一个脚本mainscript.sh 在主脚本中,我有多个脚本 child1.sh child2.sh child3.sh rm -rf /home/bdata/batch/* 我正在运行mainscript.sh,它将并行运行所有子作业 mainscript.sh child1.sh & child2.sh & child3.sh & rm -rf /home/bdata/batch/* 第4条语句在完成所有执行之前运行 在并行完成上述3个脚
child1.sh
child2.sh
child3.sh
rm -rf /home/bdata/batch/*
我正在运行mainscript.sh,它将并行运行所有子作业
mainscript.sh
child1.sh &
child2.sh &
child3.sh &
rm -rf /home/bdata/batch/*
第4条语句在完成所有执行之前运行
在并行完成上述3个脚本后,是否有任何方法可以控制最后一行的执行。这是一种解决方案:
#!/bin/bash
./child1.sh &
./child2.sh &
./child3.sh &
使用脚本的/
或完整路径
如果命令被控制操作员&
终止,则外壳
在子shell的后台执行命令。贝壳有
不等待命令完成,返回状态为0。如果要在退出脚本之前执行所有子脚本,请在末尾添加wait
(如@Mark Setchell在下面所述)。这是一种解决方案:
#!/bin/bash
./child1.sh &
./child2.sh &
./child3.sh &
使用脚本的/
或完整路径
如果命令被控制操作员&
终止,则外壳
在子shell的后台执行命令。贝壳有
不等待命令完成,返回状态为0。如果要在退出脚本之前执行所有子脚本,请在末尾添加
wait
(正如@Mark Setchell在下面所写的)。只需告诉shell等待,直到子脚本全部死亡:
child1.sh &
child2.sh &
child3.sh &
wait
rm -rf /home/bdata/batch/*
只需告诉贝壳等到孩子们都死了:
child1.sh &
child2.sh &
child3.sh &
wait
rm -rf /home/bdata/batch/*
在每个脚本的末尾添加(&D)。如果您想不考虑终端而运行,那么选择nohup选项。如果这是一个可接受的解决方案,Perl支持多线程和分叉。我知道它不是完全的shell,但几乎是无处不在的:@Kate--这是可行的,但问题是我想在所有其他shell脚本完成执行后运行最后一行。在我的情况下,它是在完成所有脚本之前删除我的文件夹在每个脚本的末尾添加(&D)。如果您想不考虑终端而运行,那么选择nohup选项。如果这是一个可接受的解决方案,Perl支持多线程和分叉。我知道它不完全是贝壳,但是几乎是无处不在的:@Kate--这是可行的,但问题是我想在所有其他shell脚本完成执行后运行最后一行。在我的情况下,它是在完成所有脚本之前删除我的文件夹添加
wait
,如果你想等到所有子脚本完成后再退出脚本。添加wait
如果要等到所有子项完成后再退出脚本。