Shell 多线程操作及线程数
Posted 细雨微光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell 多线程操作及线程数相关的知识,希望对你有一定的参考价值。
任务需要:当我需要对一个文件夹中的文件,分别压缩的时候:
原始的代码:
1 #!/usr/bin/shell 2 function getdir(){ 3 for element in `ls $1` 4 do 5 #echo $element 6 dir_or_file=$1$element 7 8 #echo $dir_or_file 9 if [ -d $dir_or_file ] 10 then 11 #echo tar cvf tar_data/$element.tar $dir_or_file 12 `zip -q -r ../tar_data/$element.zip $dir_or_file` 13 fi 14 done 15 } 16 root_dir="" 17 getdir $root_dir
多线程压缩的代码:
改成多线程实现非常简单,只需要在do后面的大括号加 & 符号,在done后面加一个wait,表示父进程等待子进程退出后再退出。
在linux中,在命令的末尾加上&
符号,则表示该命令将在后台执行,这样后面的命令不用等待前面的命令执行完就可以开始执行了。示例中的循环体内有多条命令,则可以以{}
括起来,在大括号后面添加&
符号。
1 #!/usr/bin/shell 2 function getdir(){ 3 for element in `ls $1` 4 do 5 { 6 #echo $element 7 dir_or_file=$1$element 8 9 #echo $dir_or_file 10 if [ -d $dir_or_file ] 11 then 12 #echo tar cvf tar_data/$element.tar $dir_or_file 13 `zip -q -r ../tar_data/$element.zip $dir_or_file` 14 fi 15 }& 16 done 17 wait 18 } 19 root_dir="" 20 getdir $root_dir
控制多线程个数的代码:
#!/usr/bin/shell THREAD_NUM=3 #定义描述符为9的管道 mkfifo tmp exec 9<>tmp #预先写入指定数量的换行符,一个换行符代表一个进程 for ((i=0;i<$THREAD_NUM;i++)) do echo -ne "\\n" 1>&9 done function getdir(){ for element in `ls $1` do { read -u 9 { #echo $element dir_or_file=$1$element #echo $dir_or_file if [ -d $dir_or_file ] then #echo tar cvf tar_data/$element.tar $dir_or_file `zip -q -r ../tar_data/$element.zip $dir_or_file` fi }& } done wait } root_dir="" getdir $root_dir
参考来源:
http://www.cnblogs.com/signjing/p/7074778.html
http://m.jb51.net/article/51720.htm
以上是关于Shell 多线程操作及线程数的主要内容,如果未能解决你的问题,请参考以下文章