Как запустить n дочерних процессов и процесс «секундомер»; остановка секундомера только по завершении активных процессов? - PullRequest
0 голосов
/ 11 июля 2020

Я хочу проверить, сколько времени занимает весь процесс, когда он разделен на 3,4,5 или более параллельных процессов. Мне нужно отображать и регистрировать каждый процесс разделения. Я написал / позаимствовал скрипт для запуска 3 дочерних процессов, которые спят; родительский процесс должен wait $PID перед продолжением, НО я не могу заставить эту часть работать, любая помощь приветствуется? так вот код multi_load. sh

#!/bin/bash

WORK_DIR=`pwd`
echo ${WORK_DIR}

pids=(); 
for((i=0;i<3;i++)); 
do
    mate-terminal --window --command "$WORK_DIR/sl.sh $i" &
    echo "process $! $? " ;
    pids+=( $! );
done; 

echo "Array ${pids[@]}" ;

for pid in ${pids[@]}; 
do 
    echo "Check ${pid}" ;
    wait ${pid};                 # THIS IS NOT WORKING
    echo ret=$?; 
done;

echo "finish";

exit

sl. sh

#!/bin/bash
#exec >&1 | tee slp-${1}\.log
exec &> >(tee -a "slp-${1}.log")

echo "sleep $1" ;
new_time=$((($1*3)+15)) ;
echo "new $new_time" ;
sleep $new_time ;
exit $(($1+42)) ;

Подведем итоги;

  1. родительский процесс не дожидается завершения дочерних процессов перед выходом
  2. Мне нужен секундомер, чтобы наглядно показать затраченное время Заранее спасибо!
...