shell 脚本实现简单的多线程,示例如下:
1 #!/bin/bash
23 THREAD_NUM=5
4 rm -rf run_tmp
5 mkfifo run_tmp
6 exec 9<>run_tmp
7 for ((i=0;i<$THREAD_NUM;i++))
8 do
9 echo -ne "\n" 1>&9
10 done
11
12 while read line
13 do
14 {
15
16 read -u 9
17 {
18 sh sub_scp.sh $line
19 echo -ne "\n" 1>&9
20 }&
21 }
22 done < mac
23 wait
24
25
26 # vim: set expandtab ts=2 sw=2 sts=2:
解析
第3行:指定多线程数量,这里是THREAD_NUM=5
第5行:创建管道 run_tmp
第6行:定义文件描述符9指向创建的管道(0、1、2是预留给stdin、stdout、stderr的文件描述符,不要使用)
第7~10行:将THREAD_NUM数量的“\n”字符写书管道,(可以写入其他字符)
第12~22行:执行多线程
22行读入文件mac中的一行内容,16行从管道中读出一行,18行是要执行的多线程脚本(或语句),19行是在18行结束后继续想传到中写入“\n”
第23行:等待所有线程结束后在退出