Shell中实现“多线程”执行脚本文件完美解决方案

 更新时间:2014年12月23日 10:25:21   投稿:junjie  
这篇文章主要介绍了Shell中实现“多线程”执行脚本文件完美解决方案,本文是针对一次调用执行多个脚本文件并分批执行的一个解决方法的测试和总结,需要的朋友可以参考下

即比如我有100个可执行文件,互相间没有特别的先后执行关系,如CODE:

复制代码 代码如下:

job_1
job_2
job_2
.....
job_100

想用csh/bash来多线程调用执行。

比如一次开5个线程,那么job_1,2,3,4,5一起先开始,那么其中任何一个线程如果先执行完成,则继续执行下一个没有初执行过的文件,如job_6,7,8....,这样一直以所指定的线程数来执行所有100个文件。

我本来想用 "&" 来放入后台,可是这样我一次可以指定5放入后台,但是无法知道其中任何一个程序何时执行完毕,所以也无法继续执行下一个程序啊!

完美解决方案:

复制代码 代码如下:

-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=6718 $?=0] ; cat job_1
#!/bin/bash
n=$((RANDOM % 5 + 1))
echo "$0 sleeping for $n seconds ..."
sleep $n
echo "$0 exiting ..."
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=6718 $?=0] ; for ((i = 2; i <= 10; ++i)); do cp job_1 job_$i; done
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=6718 $?=0] ; cat jobs.sh
#!/bin/bash
nParellel=5
nJobs=10
sJobPattern='./job_%d'
aJobs=()
sNextJob=
for ((iNextJob = 1; iNextJob <= nJobs; )); do
    for ((iJob = 0; iJob < nParellel; ++iJob)); do
        if [ $iNextJob -gt $nJobs ]; then
            break;
        fi
        if [ ! "${aJobs[iJob]}" ] || ! kill -0 ${aJobs[iJob]} 2> /dev/null; then
            printf -v sNextJob "$sJobPattern" $((iNextJob++))
            echo "$sNextJob starting ..."
            $sNextJob &
            aJobs[iJob]=$!
        fi
    done
    sleep .1
done
wait
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=6718 $?=0] ; ./jobs.sh
./job_1 starting ...
./job_1 sleeping for 3 seconds ...
./job_2 starting ...
./job_2 sleeping for 2 seconds ...
./job_3 starting ...
./job_3 sleeping for 5 seconds ...
./job_4 starting ...
./job_5 starting ...
./job_4 sleeping for 4 seconds ...
./job_5 sleeping for 2 seconds ...
./job_2 exiting ...
./job_6 starting ...
./job_6 sleeping for 2 seconds ...
./job_5 exiting ...
./job_7 starting ...
./job_7 sleeping for 1 seconds ...
./job_1 exiting ...
./job_8 starting ...
./job_8 sleeping for 3 seconds ...
./job_7 exiting ...
./job_9 starting ...
./job_9 sleeping for 5 seconds ...
./job_4 exiting ...
./job_6 exiting ...
./job_10 starting ...
./job_10 sleeping for 5 seconds ...
./job_3 exiting ...
./job_8 exiting ...
./job_9 exiting ...
./job_10 exiting ...
-(dearvoid@LinuxEden:Forum)-(~/tmp)-
[$$=6718 $?=0] ; bye

相关文章

  • 判断文件是否存在的shell脚本代码

    判断文件是否存在的shell脚本代码

    判断文件是否存在的shell脚本,有详细的注释,很不错,有需要的朋友不妨参考下
    2013-02-02
  • 详解&&、()、||决定linux命令的执行顺序

    详解&&、()、||决定linux命令的执行顺序

    这篇文章主要介绍了&&、()、||决定linux命令的执行顺序,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-08-08
  • Linux基础命令last 命令实例详解

    Linux基础命令last 命令实例详解

    Linux last命令用于显示系统开机以来获是从每月初登入者的讯息。本文主要给大家介绍Linux基础命令last 命令实例详解,感兴趣的朋友跟随小编一起看看吧
    2018-10-10
  • 详解Linux下的sudo及其配置文件/etc/sudoers的详细配置

    详解Linux下的sudo及其配置文件/etc/sudoers的详细配置

    这篇文章主要介绍了详解Linux下的sudo及其配置文件/etc/sudoers的详细配置的相关资料,需要的朋友可以参考下
    2017-05-05
  • Linux 文件查找打包压缩及解压命令详解

    Linux 文件查找打包压缩及解压命令详解

    这篇文章主要介绍了Linux 文件查找,打包压缩及解压,文件查找和压缩解压是Linux系统中非常常见的操作,掌握了相关命令和技巧,可以提高我们的工作效率和文件管理能力,需要的朋友可以参考下
    2023-11-11
  • linux查看已使用内存的常用命令

    linux查看已使用内存的常用命令

    在Linux系统中,我们可以使用多个命令来查看内存使用情况,其中比较常用的命令有free、top、ps和sar,使用free命令可以查看系统内存的使用情况,这些命令可以帮助我们快速了解系统内存的使用情况,从而更好地进行内存管理和优化,需要的朋友可以参考下
    2024-01-01
  • 使用shell脚本一键部署LNMP架构的方法

    使用shell脚本一键部署LNMP架构的方法

    这篇文章主要介绍了使用shell脚本一键部署LNMP架构的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Shell编程之特殊变量和扩展变量详解

    Shell编程之特殊变量和扩展变量详解

    这篇文章主要给大家介绍了关于Shell编程教程之特殊变量和扩展变量的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用shell具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 根据公司需求写的一个linux 巡检小脚本

    根据公司需求写的一个linux 巡检小脚本

    这篇文章主要介绍了根据公司需求写的一个linux 巡检小脚本,可以用来检查服务器的一些运行状况,需要的朋友可以参考下
    2017-04-04
  • 如何查看Linux提供的Shell解析器

    如何查看Linux提供的Shell解析器

    这篇文章主要介绍了查看Linux提供的Shell解析器的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06

最新评论