Как получить идентификатор процесса (pid) из раздвоенного дочернего процесса в оболочке script

Я считаю, что я могу развить 10 дочерних процессов из родительского процесса.

Ниже мой код:

#/bin/sh
fpfunction(){
n=1
while (($n<20))
do

        echo "Hello World-- $n times"
        sleep 2
        echo "Hello World2-- $n times"
        n=$(( n+1 ))
done
}

fork(){
    count=0
    while (($count<=10))
    do
      fpfunction &
      count=$(( count+1 ))
    done
}

fork

Однако, как я могу получить pid из каждого дочернего процесса, который я только что создал?

Спасибо.

Ответы

Ответ 1

Идентификатор PID дочернего дочернего процесса хранится в $!.

fpfunction &
child_pid=$!
parent_pid=$$

Для обратного использования используйте $PPID, чтобы получить родительский PID процесса из дочернего элемента.

fpfunction() {
    local child_pid=$$
    local parent_pid=$PPID
    ...
}

Кроме того, для того, что стоит, вы можете комбинировать циклические операторы в один цикл для C-like:

for ((n = 1; n < 20; ++n)); do
do
    echo "Hello World-- $n times"
    sleep 2
    echo "Hello World2-- $n times"
done

Ответ 2

Из руководства Bash:

!

Расширяется до идентификатора процесса последней выполненной фоновой (асинхронной) команды.

i.e., используйте $!.