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秒,这里是关键点,其实引入管道模拟多线程的关键就是为了这个暂停的3秒(实际上是微大于3秒的),让系统有个缓冲的时间,起到限制所谓并发的进程数量。

sleep 3

# 再次往管道文件中写入一个空行,为了挂起的for循环能够继续执行。

echo "" >&4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值