linux下的shell多线程用法,shell多线程操作
经常需要拷贝大量的数据到多个服务器,发现rsync对与某些格式的文件同步很快,但是对于一些格式的文件同步速度真的很慢,如果能使用阵列应该会提高很多。当然采用分布式也有很大的提升。 下面是脚本代码,请大家多多指教: 前面部分的密码就没贴出来了,你们可以自己添加passwd变量及变量ip thead_num=10 tmp_fifo_file="/tmp/$$.fifo" mkfifo $tmp_fifo_file exec 4$tmp_fifo_file rm -f $tmp_fifo_file for ((i=0;i do echo "" done >&4 for i in $ip do read -u4 { expect -c " set timeout -1 spawn scp -p $file $i:$dir expect { \"yes/no\" {send \"yes\r\";exp_continue} \"*password\" {send \"$passwd\r\";exp_continue} }" sleep 3 echo "" >&4 }& done wait exec 4 >&- exit 0 以下为详细注解。#设置线程数,在这里所谓的线程,其实就是几乎同时放入后台(使用&)执行的进程。thead_num=10 # 脚本运行的当前进程ID号作为文件名,其实这样命名只是为了防止创建管道文件时与现有文件名重复,从而引起创建失败,别无他用。tmp_fifofile="/tmp/$$.fifo" #创建管道文件mkfifo $tmp_fifo_file #把文件描述符4指向管道文件,文件描述符可以使用3-9任意一个即可(除了5),0、1、2、5已有定义,具体可参考关于文件描述符的文章。exec 4$tmp_fifo_file #其实删不删除都太多关系 rm -f $tmp_fifo_file # 暂停3秒linux 线程,这里是关键点,其实引入管道模拟多线程的关键就是为了这个暂停的3秒(实际上是微大于3秒的),让系统有个缓冲的时间,起到限制所谓并发的进程数量。 sleep 3 # 再次往管道文件中写入一个空行,为了挂起的for循环能够继续执行。 echo "" >&4 (编辑:台州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 窗口放置:类似WinSplit Revolution的Linux应用程序(KDE)?
- linux – 内核模块中的EXPORT_SYMBOL | insmod期间未定义的
- linux – tee命令无法正常工作(带有read和echo)
- linux C 如何从当前模块获取kobject
- 使用sed替换shell脚本中的特殊字符
- 在Linux中关闭历史记录[已关闭]
- linux如何同时32位和64位?或者是glibc处理的东西?
- 内核改进让Alder Lake处理器在Linux上跑得比Windows 11更快
- 为什么Linux系统调用返回类型“long”?
- linux – [01000] [unixodBC] [Driver Manager]无法打开lib