1. #!/usr/bin/env bash
    2. process=${1:-5}
    3. ff=9
    4. function make_fifo()
    5. {
    6. local num=$1
    7. tmp_fifofile=/tmp/$$.fifo
    8. mkfifo $tmp_fifofile
    9. cmd="exec ${ff}<> $tmp_fifofile"
    10. eval $cmd
    11. rm $tmp_fifofile
    12. for i in `seq $num`
    13. do
    14. echo >&${ff}
    15. done
    16. }
    17. function clean_fifo()
    18. {
    19. wait # 等待程序
    20. cmd1="exec ${ff}>&-"
    21. cmd2="exec ${ff}<&-"
    22. eval $cmd1
    23. eval $cmd2
    24. }
    25. function parall_funs()
    26. {
    27. local funs=$1
    28. for((i=0;i<10;i++));
    29. do
    30. read -u ${ff}
    31. {
    32. $funs $i
    33. cmd="echo >&${ff}"
    34. eval $cmd
    35. }&
    36. done
    37. }
    38. function say()
    39. {
    40. echo $1
    41. sleep 1
    42. }
    43. make_fifo $process
    44. parall_funs say
    45. clean_fifo
    46. echo "run end!"