How to save multiple $! into variables and use it later in bash?

前端 未结 3 1407
無奈伤痛
無奈伤痛 2021-01-27 07:02

I want to get the pids of two background processes,

sleep 20 & pid1=$\\!; sleep 10 & pid2=$\\!; echo \"pid1: $pid1, pid2: $pid2\"

and

3条回答
  •  迷失自我
    2021-01-27 07:41

    I have accomplished this in the past by using bash arrays to hold the PIDs. I had a sequence of database imports to run and when handled sequentially they took ~8 hours to complete. I launched them all as background processes and tracked the list of PIDs to watch for completion and it got the processing time down to 45 minutes.

    Here is an example of launching background processes, storing the PIDs in an array, and then printing all of the array values:

    $ pids=()
    $ sleep 20 &
    22991
    $ pids+=($!)
    $ sleep 20 &
    23298
    $ pids+=($!)
    $ j=0;for i in "${pids[@]}";do ((j=j+1));echo 'pid'$j': '$i;done
    pid1: 22991
    pid2: 23298
    

提交回复
热议问题