Получение пидов в массиве в сценарии ksh - PullRequest
0 голосов
/ 21 марта 2019

Я создаю сценарий, используя ksh, где процесс (simple_script.sh) выполняется и повторяется 5 раз.Что мне нужно сделать, так это получать pid при каждом выполнении процесса и сохранять их в массиве.До сих пор я мог заставить скрипт выполнить simple_script.sh 5 раз, но не смог получить pid в массив.

while [ "$i" -lt 5 ]
do
        ./simple_script.sh
        pids[$i]=$!
        i=$((i+1))
done

1 Ответ

0 голосов
/ 21 марта 2019

Как сказал Андре Гелинас, $! хранит pid последнего фонового процесса.

Если вы в порядке со всеми командами, выполняющимися параллельно, вы можете использовать это

#!/bin/ksh

i=0
while [ "$i" -lt 5 ]
do
        { ls 1>/dev/null 2>&1; } &
        pids[$i]=$!
        i=$((i+1))
        # print the index and the pids collected so far
        echo $i
        echo "${pids[*]}"
done

И результат будет выглядеть примерно так:

1
5534
2
5534 5535
3
5534 5535 5536
4
5534 5535 5536 5537
5
5534 5535 5536 5537 5538

Если вы хотите выполнять команды последовательно, вы можете использовать wait.

#!/bin/ksh

i=0
while [ "$i" -lt 5 ]
do
        { ls 1>/dev/null 2>&1; } &
        pids[$i]=$!
        wait
        i=$((i+1))
        echo $i
        echo "${pids[*]}"
done
...