背景:最近有一同事需要对一批文件进行压缩,文件比较大也比较多,希望能同时对多个文件进行压缩,同时还要求同时被压缩的文件的个数
要受控制,可以指定;这样做的目的是为了充分利用系统的资源,又不造成因为竞争资源而降低压缩的效率。为此我专门写了一个SHELL,来完成这个功能。觉得很有意识。所以拿出来和大家分享一下。如果能给大家一点点的启发或者
帮助,那将是我最大的荣幸!
原理:遍历fileList.txt文件(该文件保存着要被压缩的文件的文件名),如果当前正在执行的gzip的数目少于预定值4,则执行gzip命令压缩
文件,如果已经超过预定值4,则休眠10秒钟。利用信号机制,当gzip执行完成的时候会向父进程发SIGCHLD信号,父进程捕获该信号后,将保存
正在执行的GZIP数目的变量runNum的值减一。
代码:
################################################################
#!/bin/bash
set -bm #必须执行该命令,不然会收不到信号
runNum=0
#信号处理函数
function traSIGCHLD(){
echo 'a child exit'
runNum=$((runNum-1))
}</