转载请注明出处: Linux系统运维 http://www.linuxyw.com/linux/Shell/20130403/15.html 在网上看到shell模拟多线程的脚本,看了一下,估计对于新手还是很难理解,本文将进行更加详细的注解。 其实这个脚本并没有实现多线程,shell也根本不可能实现多线程。 此脚本的作用无非是限制几乎同时放入后台执行的进程数量而已,从而达到在提高脚本执行效率的同时又不明显增加负载的作用。 原始脚本如下:
#!/bin/bash
SEND_THREAD_NUM=13 tmp_fifofile="/tmp/$$.fifo" mkfifo "$tmp_fifofile" exec 6<>"$tmp_fifofile" for ((i=0;i<$SEND_THREAD_NUM;i++));do echo done >&6 for i in `seq 1 100`;do read -u6 { echo $i sleep 3 echo >&6 } & pid=$! echo $pid done wait exec 6>&- exit 0 以下为详细注解。 #设置线程数,在这里所谓的线程,其实就是几乎同时放入后台(使用&)执行的进程。 SEND_THREAD_NUM=13 # 脚本运行的当前进程ID号作为文件名,其实这样命名只是为了防止创建管道文件时与现有文件名重复,从而引起创建失败,别无他用。 tmp_fifofile="/tmp/$$.fifo" 本文来自linux系统运维:http://www.linuxyw.com/linux/Shell/20130403/15.html |