Как получить идентификатор процесса (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., используйте $!
.