陈奇网络工作室

外壳的多进程实现

建设工作站服务器

方法总结:

1 .命令等待方式

2 .管道fifo

1.1

例1.1 :使用command wait将需要多进程运行的所有程序块转移到后台运行即可。

在“{}”中将主运行程序组成一个块,在中放入后台,四次运行全部放入后台后,

使用一个wait命令,您需要等待所有后台进程的执行完成

否则,系统不会等待。 继续直接执行后续命令,直到整个程序结束。

#! /bin/bash

start=`date & #039; %s& #039; `

for ( ) I=0; i10; I ) )

do

{

echo & #039; success ! & #039;

第三季

} #在后台运行上述程序块

wait #等待上述程序结束

end=`date & #039; %s& #039; `

Echo& #039; time:& #039; ` expr $ end$ start `

2.1

实例2.1 :

#! /bin/sh

function a_sub {

休眠2;

endtime=`date %s `

sumtime=$[$endtime-$starttime]

echo& #039; 我在whl上,整个脚本已经$sumtime秒& #039; 正在执行

}

开始时间=` date % s `

导出开始时间

tmp_fifofile=& #039; /tmp/$$.fifo& #039; ##其中$$是进程的pid

mkfifo $tmp_fifofile ##创建命名管道

exec 6$tmp_fifofile ##绑定文件描述符6和FIFO

可以通过绑定rm -f $tmp_fifofile ##来删除文件

thread=30 ##

并发行数为30,控制用此数字一次发送的请求数

for ( ) I=0; i$thread; I ) );

do

echo 6 ##管道文件的读取是逐行进行的,因此在管道中写入空行

while read dat

do

#读取管道中的一行,每读取一次,管道就会减少一行

读- 6

{ a_sub || {echo & #039; a_sub is failed& #039; }

echo $dat

每次执行a_sub函数时,echo 6 ##都会添加一个空行,以允许下一个过程继续

}

donedata.txt

wait ##此处的wait意味着您必须等待所有上述操作(包括后台进程)完成,然后再继续下一步。

exec 6- ##关闭文件描述符6写入

exec 6-

示例2 :多线程备份数据库

#! /bin/bash

hour=`date %H `

day=`date %F `

now=`date %F_%H `

all_dbs=& #039; no& #039;

passwd=& #039; mysql_pass& #039;

sshpass=& #039; ssh_pass& #039;

dbs=& #039; db1 db2 db3 dbx dby dbz& #039;

CPU _ num=` cat/proc/CPU info|grep processor|WC-l `

p_fifo=& #039; /tmp/$$.pipo& #039;

mkfifo $p_fifo

exec 111$p_fifo #相关文件描述符和管道

rm -f $p_fifo

trap & #039; exec 111-; exec 111-; exit 0& #039; 2

for ( ) I=1; i=$cpu_num; I ) )

do

定义echo 111 #进程队列的大小和cpu内核数

函数备份( )

{

if [ $all_dbs==& #039; no& #039; ]; then

for db in $dbs

do

read -u111 #从队列中检索消息,并将队列中的消息数减少1

{

dbname=`echo $db|sed & #039; s/-/@002d/g `

ops=& #039; parallel=5compress-threads=5databases=$ dbname & amp; #039;

Bpath=& #039;/data1/EHR-MySQL-backup/$ { day }/$ { db } & amp; #039;

在备份

速度10

将消息添加到echo 111 #队列并保留队列中的消息数(进程数)

} #在后台处理代码块

wait #等待所有后台进程处理

关闭exec 111- #描述符,编写关闭

关闭exec 111- #描述符,关闭阅读

else

OPS=& #039; parallel=5compress-threads=5& amp; #039;

Bpath=& #039;/data1/EHR-MySQL-backup/$ { day } & amp; #039;

在备份

fi

}

backup ( )

{

if [-f $ { bpath }/lsn _ $ { last }/xtra backup _ check points ]; then

echo & #039; incremental_basedir found,do a increment backup& #039;

/usr/bin/innobackupex-uroot-p $ { passwd }-no-timestamp $ { ops }

incrementalincremental _ basedir=$ { bpath }/lsn _ $ { last } /

extra-lsn dir=$ { bpath }/lsn _ $ { now }/$ { bpath }stream=XB stream|gzip

|sshpass-p& #039; ${sshpass}& #039; ssh-p18122root@10.10.10.79& #039; cat-

${bpath}/${now}.xbstram.gz& #039;

else

echo& #039; incremental_basedirnotfound,do a full backup& #039;

/usr/bin/innobackupex-uroot-p $ { passwd }-no-timestamp $ { ops }

extra-lsn dir=$ { bpath }/lsn _ $ { now }/$ { bpath }stream=tar|gzip|ssh pass

-p& #039; ${sshpass}& #039; ssh-p18122root@10.10.10.79& #039; cat-

${bpath}/${now}.tgz& #039;

fi

}

case $hour in

22 ) )。

last=`date %F -d -yesterday `

find/data1/EHR-MySQL-backup/- name & amp; #039; ${last}*& #039; -typed-execRM-r& #039; {}\\& quot;

day=`date %F -d 1days `

备份

10 ) )。

last=`date %F_%H -d -12hours `

备份

十四|十八)

last=`date %F_%H -d -4hours `

备份

* )

echo & #039; not backup time& #039;

欧洲航空

详情请访问云服务器、域名注册、虚拟主机的问题,请访问西部数码代理商官方网站: www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3