控制shell脚本并发进程数

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

控制shell脚本并发进程数

shell命令后面加&,可以让这条shell命令异步的执行。例如:

sleep 10 &

执行这条命令后,并不会阻塞10秒,而是立即返回。

如果将这种方法用在while循环中,则可以实现多进程并行处理。例如,test.sh文件为:

while read line; do
  sleep 10 &
done

在执行ls -l | test.sh 时,会有多个进程并行启动,进程数等于ls -l返回结果的行数。

而有时为了避免并发进程数过多,导致机器卡死,需要限制并发的数量。以下代码实现了该功能:

while read line; do
  joblist=($(jobs -p))
    while (( ${#joblist[*]} >= 20 ))
    do
        sleep 1
        joblist=($(jobs -p))
    done
    sleep 10 &
done

这样,可以将并发进程数控制在20个。

Author: <kyle@localhost.localdomain>

Date: 2013-03-12 17:24:59 CST

HTML generated by org-mode 6.21b in emacs 23

shell多线程编程 业务开发过程中,经常会在后台写一些shell脚本处理数据,但估计很多人不知道shell脚本也可以支持多线程,而且非常简单。本篇文章主要就是介绍shell实现多进程以及进程数控制需求: 有一个文件里面有一组数值,shell脚本读取文件中的每一行值的时候就需要sleep对应值得时间, 文件中的内容加起来等于45s[root@localhost test]# cat file 1 2 5 6 3 阅读详情

相关推荐

shell 多线程介绍与举例

命令用于等待所有后台任务完成后再执行后续的命令。这些方法都可以在Shell脚本中实现多线程。将会在后台同时执行,而不会相互阻塞。命令会读取文件中的每一行数据,并使用。参数,指定同时执行3个并行任务。参数,指定同时执行3个并行任务。函数并行处理这些数据。函数并行处理这些数据。是包含需要处理的数据的文件。文件中的每一行数据,并使用。

彩色代码的博客 5851

使用linux管道文件特性制作队列,控制线程数目实现高并发

Shell中并没有真正意义的多线程,要实现多线程可以启动多个后端进程,最大程度利用cpu性能。 知识储备: 一.管道文件 1:无名管道(ps aux | grep nginx) 2:有名管道(mkfifo /tmp/fd1) 有名管道特性: 1.cat /tmp/fd1(如果管道内容为空,则阻塞) 2.echo "test" &gt; /tmp/fd1(如果没有读管道的操作,则阻塞)...

Simpletwt的博客 959

shell实现多线程并发管理

shell实现多线程并发管理

m0_57808069的博客 1049

shell实现多并发控制

Shell实现并发执行任务

qq_45443879的博客 7492

shell脚本进程数控制

shell脚本进程数控制

weixin_44991162的博客 623

Shell 脚本进程并发&进程数控制

Shell 都以串行的方式自上而下执行命令,不适用需要大量作业的场景。 学习此篇shell脚本进程并发,能够大大提高工作效率~ 通过wait 和 & 后台符号 可以实现并行,但无法控制进程数。 { task }& done wait {} 将主执行程序变为一个块,使用&放入后台 wait 函数等待所有后台进程执行程序,否则继续执行后续命令直到整个脚本结束 通过有名管...

weixin_30566063的博客 550

shell脚本控制并发

Shell 脚本进程并发&进程数控制 https://www.cnblogs.com/hehehe886/p/9150418.html

weixin_44777619的博客 250

linux shell多进程通信,linux shell控制并发进程数实践 · BG2BKK Site

shell脚本多线程应用同事将新上线APP的一部分log交给我,让我统计下这些log中供出现了哪些deviceid采用awk就可以实现这部分匹配和统计功能,还是比较简单的挑战在于,这批log文件非常多非常大,单进程工作处理起来非常的慢。因此我想到了多进程方式。以往需要使用shell来实现多进程时,采用以下模板for seq; do{task}&done* 当任务较为简单,并发数不多时,这招...

weixin_35651191的博客 395

shell下的多进程实现

参考:http://www.jb51.net/article/51720.htmhttp://bbs.51cto.com/thread-1104907-1-1.html原理:通过管道 和文件操作符控制进程数。通过curl访问百度首页,并对比在进程数不同的情况下执行完脚本所用时间来验证多进程。1.代码#!/bin/bash #允许的进程数 THREAD_NUM=${2:-10}...

weixin_34318956的博客 124

Shell 实现多任务并发

实现思路实现一个shell进程库,通过类似于init,run,wait几个简单的命令,就可以迅速实现多进程并发,伪码如下:process_init # 创建进程 for city in ${cities[*]} do cmd="handler $city" process_run $cmd done process_wait # 等待进程 原理解析在实现C++线程库的时候,通常会...

liuwen0730的博客 998

shell 模拟oracle并发,Shell脚本中的并发

主要记录一下Shell脚本中的命令的并发和串行执行。默认的情况下,Shell脚本中的命令是串行执行的,必须等到前一条命令执行完后才执行接下来的命令,但是如果我有一大批的的命令需要执行,而且互相又没有影响的情况下(有影响的话就比较复杂了),那么就要使用命令的并发执行了。看下面的代码:#!/bin/bashfor((i=0;idocommands1donecommands2对于上面的代码,因...

weixin_34401781的博客 242

shell的介绍以及如何写shell脚本并发

shell是外壳的意思,就是操作系统的外壳。如果这些命令相互之间是独立的,则可以使用“并发”的方式执行这些命令,这样可以更好地利用系统资源,提升运行效率,缩短脚本执行的时间。n 代表一个数字,0为脚本名称,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推。解决上面的问题,只需要在上述循环体的done语句后面加上wait命令,该命令等待当前脚本进程下的子进程结束,再运行后面的语句。使用变量的时,用英文符号"$"取变量值,对于较长的变量名,建议加上{ }花括号,帮助解释器识别变量的边界。

weixin_53344209的博客 988

linux shell实现并发进程执行并且控制最大同时进程数

#!bin/bash num=5 fifofile="/tmp/$$.fifo" #创建管道文件,以8作为管道符,删除不影响句柄使用 mkfifo $fifofile exec 8<> $fifofile rm $fifofile #创建for循环使得管道中初始化已存在5行空行 for i in `seq $num` do echo "" >&8 done #创建f...

weixin_42301996的博客 1320

shell 多线程脚本

shell 多线程脚本实现 方法一: for 循环 加&,指定的所有进程在后台同时运行: [root@node1 sh]# cat process.sh #!/bin/sh #2021年4月2日16:41:37 echo “run 50 process…” for ((i=0;i<50;i++)) do { echo “process $i is running ,sleep 5…” sleep 5 }& done wait echo “total time consume is $S

weixin_42808782的博客 3882

Shell多线程操作及线程数控制实例

来源:http://www.jb51.net/article/51720.htm 这篇文章主要介绍了Shell多线程操作及线程数控制实例,文中从单线程实现一个需求开始,不断加入代码实现多线程以及线程数的控制功能,需要的朋友可以参考下 前言 在业务开发过程中,经常会在后台写一些shell脚本处理数据,但估计很多人不知道shell脚本也可以支持多线程,而且非常简单。本篇文章主要就

gb4215287的博客 1404

linux fifo支持多进程,用fifo来处理shell下的多进程并发

今天看到个不错的shell多进程并发脚本的讲解,现共享给大家:#!/bin/bash#author : peterguo@tencent.com#date : 2013.05.24#sub process do somethingfunction a_sub_process {echo "processing in pid [$$]"sleep 1}#创建一个fifo文件FIFO_FILE...

weixin_36083698的博客 456

linux shell并发执行命令

一般我们在linux上十一shell命令的批量执行操作,一般使用for或者while 循环进行操作,但是这样有一个问题,for或者while本质上是串行的,并不能,如果某一个命令执行耗费的时间比较长,就会等待很长的时间,很浪费时间; 将被执行的命令运行为后台执行,可以实现并发执行多条命令; for ((i=0;i<10;i++));do echo "done ";done &...

weixin_30409849的博客 846

linux并发编程

linux下实现并发逻辑 ################shell 模拟实现并发跑数################# 有时候我们知道一些程序是可以同时跑的,互不影响,为了提高效率不得不使用并发脚本 #1、思路一 我们都知道在linux中把程序丢后台跑脚本,我们可以同时跑很多个,这就是实现并发的思路,但是呢? 如果我们一次性跑很多的后台程序,如果服务器没能扛住。。。。这就尴尬了,如果手工控制。...

qq_18219755的博客 376

shell的多进程方式

之前在用脚本去分析大的日志文件的时候,因为文件有几十G之大,记录数达到上千万量级甚至更多时,单进程的脚本去分析,效率非常低下,耗时也会相当久,因此这时候就需要用到shell的多进程机制,以加快分析进度。 多进程方式主要分为以下3种方式 1)代码段后台执行方式 例子从网上摘抄: #!/bin/bash   for ((i=0;i   {   sleep 3;echo 1

chinnrai的专栏 1063
上一篇: Linux命令行与shell脚本编程大全读书笔记(1)
flyingsk
博客等级 码龄16年 2粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值