【shell】Shell 实现多线程(多任务)
目录
原文:https://www.cnblogs.com/zhengbin/p/9513762.html
实现方案:
1.命令结尾添加:&
+ View code
#/bin/bash all_num=10 a=$(date +%H%M%S) for num in `seq 1 ${all_num}` do { sleep 1 echo ${num} } & done b=$(date +%H%M%S) echo -e "startTime:\t$a" echo -e "endTime:\t$b"
在命令的末尾加 & 符号,则命令将在后台执行,这样后面的命令不需要等待该命令执行完再开始执行。
2.解决主线程提前退出问题,添加 wait
+ View code
#/bin/bash all_num=10 a=$(date +%H%M%S) for num in `seq 1 ${all_num}` do { sleep 1 echo ${num} } & # 将命令在后台执行,命令范围用{}包围 done # 等待当前脚本进程下的子进程结束 wait b=$(date +%H%M%S) echo -e "startTime:\t$a" echo -e "endTime:\t$b"
3.控制后台执行数(线程数),mkfifo
+ View code
#/bin/bash all_num=10 # 设置并发的进程数 thread_num=5 a=$(date +%H%M%S) # mkfifo tempfifo="my_temp_fifo" mkfifo ${tempfifo} # 使文件描述符为非阻塞式 exec 6<>${tempfifo} rm -f ${tempfifo} # 为文件描述符创建占位信息 for ((i=1;i<=${thread_num};i++)) do { echo } done >&6 # for num in `seq 1 ${all_num}` do { read -u6 { sleep 1 echo ${num} echo "" >&6 } & } done wait # 关闭fd6管道 exec 6>&- b=$(date +%H%M%S) echo -e "startTime:\t$a" echo -e "endTime:\t$b"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律