问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux bash shell 多线程脚本无法并处处理命令

发布网友 发布时间:2022-05-15 02:45

我来回答

2个回答

热心网友 时间:2023-10-03 17:12

一堆的错误,帮你改了。自己diff一下就明白了。


下次贴问题之前,请确保你的代码能执行……  


另外,之所以是串行,是因为你根本就没有执行过文件里的命令,而永远是 sleep 同样长的时间,当然最终的效果就是串行,你可以改成 sleep 随机长的时间,或者确实的执行文件里的命令,就能看到并行效果了 (确保命令做一些 IO 操作,或者多核cpu)。


#!/bin/bash

if [ -z "$1" ];then
   echo "Usage:`basename $0` filename(containing the cmd you want to execute)"
   exit 1
else
   if [ ! -f "$1" ];then
      echo "The file \"$1\" you provide doesn't exist!"
      exit 1
   else
      cmdfile=$1
      jobnum=`cat $cmdfile|grep -v "^#"|grep -v "^[[:space:]]#"|wc -l`
      line=`cat $cmdfile|wc -l`
   fi
fi
#创建管道文件,并将其文件描述符设置为6,同时以读写的方式打开它
tmp_fifo="tmp$$.fifo"
mkfifo ${tmp_fifo}
exec 6<> ${tmp_fifo}
#限定线程数的上限
thread=3
for(( i=0;i<$thread;i++ ))
do
    echo
done >&6

for(( j=0;j<${line};j++ ))
do
   read -u 6
   {
      read command
      if [ -n "`echo $command|grep -v "^#"`" ] && [ -n "`echo $command|grep -v "[[:space:]]#"`" ];then
            echo "[`date +"%Y%m%d %H:%M:%S"`]:command is $command,j is $j"
            sleep 3
            echo "[`date +"%Y%m%d %H:%M:%S"`]:job $j finishes successfully!">>/tmp/multpro_`date +%Y%m%d`.log
       fi
      #作业完成后向管道文件写回一个按行符
       echo >&6
   }&
done < "$cmdfile"
wait
exec 6<&-
rm ${tmp_fifo}
exit 0

追问我们的服务器不能使用U盘,所以我拍照后对着打出来的。非常感谢你改过来了。我后来在自己的机器试了一下,是可以的。不是sleep和核心的问题。我的机器是双核处理器bash 为4.2.10(1)-release;服务器的是双CPU的,每个cpu四核心,bash是3.00.15。估计是bash版本不同。

热心网友 时间:2023-10-03 17:13

试了一下脚本,看日志的任务结束顺序是随机的嘛,这不就是“并行”的嘛。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
“晚来天欲雪,能饮一杯无?”是什么意思_出处及原文翻译_学习力 胸肌中部怎么练 血沉高是怎么回事,怎样才能降低啊! 中海锦江城多久交房 “QMS”作为“质量管理体系”的英文缩写,其背后理论及应用如何?_百度... 我用QQ登的快手绑定了一个电话号码,电话号码不用了,现在怎么能登得进去... 桂林银行白金客户条件 桂林银行最高等级卡 iQOO 11系列曝光,预计年底正式发布! vivo X90先别买?iQOO 11系列配置堪称豪华 WaitMotion指令功能 linux系统编程,简单的shell命令的实现,程序运行后,带参数的命令无法识别是怎么回事?? U盘显示磁盘结构损坏且无法读取 如何精准引流快速爆粉如何推广自己的 把一张调整好的表格复制到其它地方时表格格式会改变 小学一年级上册语文什么是一类词什么是二类词? 苏教版一年级语文下册识字1板书怎么写 有没有类似水印相机的软件,电脑版软件,需要在电脑上面拍照使用 有一年级苏教版语文上册生字词吗??? 社保已经停交5年了,怎么办? 这种文字图片要怎么做啊? 请看图片,这是什么字啊? 怎样做带字的图片啊 这样文字的图片怎么做啊 怎么让鸡蛋壳更硬 怎样才能让心变得很硬?因为我不想老是很软弱,哭什么的。 苹果手机卡顿怎么解决 我是男生,怎样才能使头发变得很硬? 一个口字旁一个甲 拳头怎样才能变得更硬? 300064是深证股吗 请,成都托管中心,我买的300064,股票现在怎么? 重大资产重组的股票复牌后一般会有多少个涨停呀?比如300064,不知它复牌后会有多少个涨停呢? 10086开通的超级会员怎么登陆 黄河旋风的股票行情?黄河旋风股票价位?黄河旋风为何跌停? 当随意调节三星8K电视的亮度对比度时,它的画面还能够时刻保持*真状态吗? PPT 汇报时间如何控制 制作PPT的时间控制? 如何在PPT中控制播放时间,时间为二十分钟,到点,自动停止 请问网络电视出现蓝屏,并且显示无信号,网络正常,这是为什么 请问网络电视出现蓝屏,并且显示无信号,网络正常,这是为什么 电视连接wifi网,怎么一直蓝屏无信号? 电视连接wifi网,怎么一直蓝屏无信号? 痛风病人能用热水泡脚吗? 关于债券的问题! 关于债券的危害 关于债券的问题 他父母早逝,嫂子卖嫁妆供他上学,现今身价300亿,他怎么回报的? 哪位父母双亡的首富,是被嫂子和哥哥培养出来的? 13岁丧父15岁丧母,嫂子变卖嫁妆供他读书,后来怎样?