2013-06-28 18 views
15

Credo di poter eseguire il fork di 10 processi figlio da un processo padre.come ottenere l'id di processo (pid) dal processo figlio biforcuto nello script di shell

Qui di seguito è il mio codice:

#/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 

Tuttavia, come posso ottenere il PID di ogni processo figlio ho appena creato?

Grazie.

risposta

35

Il PID di un processo secondario in background è memorizzato in $!.

fpfunction & 
child_pid=$! 
parent_pid=$$ 

Per il contrario, utilizzare $PPID per ottenere PID del processo padre dal bambino.

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

Anche per quello che vale, è possibile combinare le dichiarazioni di loop in un unico C-like ciclo for:

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

@qwwqwwq E 'portatile a qualsiasi shell sh-compatibile, don' Ho bisogno di bash. –

5

Dal Bash manual:

!

espande per l'ID di processo del comando sfondo eseguito più di recente (asincrona).

, ad esempio $!.

Problemi correlati