美文网首页
shell并行(并发或者叫多进程)执行的陷阱

shell并行(并发或者叫多进程)执行的陷阱

作者: 正哥哥 | 来源:发表于2017-11-10 14:03 被阅读0次

    我常用的并行执行有以下几种方式:

    1. 脚本中调用另外的脚本
    bash script01.sh &
    bash script02.sh &
    bash script03.sh &
    wait
    

    2.函数并行执行

    func_01 &
    func_02 &
    func_03 &
    wait
    

    3.循环体并行执行

    for i in {1..50}
    do
    {
        ping 192.168.1.$i -c 3 &>/dev/null
        if [ $? = 0 ]; then
            echo "[SUCCESS] 192.168.1.$i" is alive.
        else
            echo "[ERROR] 192.168.1.$i is dead!"
        fi
    }&
    done
    wait
    

    注意:如下方式的循环体是无法进行并行执行的

    cat svn_exist_files.txt | while read LINE
    do
    {
        pinyin_name=$(svn log $LINE | grep line | head -n1 | cut -d' ' -f3)
        echo $LINE $pinyin_name >> final_list.txt
        echo 'this is a loop.'
    }&
    done
    wait
    
    echo 'Can this line be printed in the last?'
    

    执行这样的脚本,首先被打印的就是Can this line be printed in the last?这一行,说明这里的wait是没有起到我们想要达到的目的。

    可以将cat svn_exist_files.txt | while read LINE改成for i in $(cat svn_exist_files)便可以并行执循环体了,但是要注意svn_exist_files.txt文本中的每一行只有一列,也就是每一行文本不能有空格!

    结论:cat xxx | while read LINE 这种循环体是不可以并行执行的!

    相关文章

      网友评论

          本文标题:shell并行(并发或者叫多进程)执行的陷阱

          本文链接:https://www.haomeiwen.com/subject/edsbmxtx.html