process id im unterprogramm

25/08/2010 - 13:40 von acek | Report spam
hallo

wie kann ich die pid des childprozesses in einem script herausfinden? vor
einiger zeit ging das unter linux mit der variablen $!

jetzt bekomme ich keine richtige pid des childprozesses?

das script:
child1() { echo "ch1 $! $$ "; child2 & sleep 10000; }; child2() { echo "ch2
$! $$ ";sleep 20000; };( child1 ) & echo "par $! $$ ";sleep 30000;

das gibt es mir aus.

[1] 31613
ch1 31603 5304
par 31613 5304
ch2 31603 5304


wie komm ich nun z.b. an die pid 31615 im laufenden script?

pstree ausdruck:
|-konsole,5280,alex
| |-bash,5290
| |-bash,5291
| |-bash,5292
| |-bash,5301
| |-bash,5304
| | |-bash,31613
| | | |-bash,31615
| | | | `-sleep,31617 20000
| | | `-sleep,31616 10000
| | `-sleep,31614 30000

danke fuer hilfe,
alex
 

Lesen sie die antworten

#1 samlowry
26/08/2010 - 01:54 | Warnen spam
Hi,

falls Du es noch brauchst:

In $! steht die Prozessnummer des zuletzt im Hintergrung gestarteten
Prozesses. Daher gibt in Deinem Beispiel "par" auch korrekt die Pid
von "child1" aus. child1 und child2 geben irgendwas aus (wahrscheinlich
eine PID von vorherigen Versuchen), da in child1 die Reihenfolge verkehrt
ist und in child2 gar kein Subprozess gestartet wird.

D.h mit $! kannst Du Dir im *Parent* die Prozessnummer des Kindes speichern.

Da in Subshells -aus Gründen, die ich nicht kenne- in $$ oder $PPID
immer die
Werte aus der aufrufenden Shell stehen, musst Du Dir mit folgendem Trick
behelfen, falls Du wirklich im Kind die Kind-PID brauchst:

(subpid=$(bash -c 'echo $PPID'); echo $subpid;)


das script:
child1() { echo "ch1 $! $$ "; child2& sleep 10000; }; child2() { echo "ch2
$! $$ ";sleep 20000; };( child1 )& echo "par $! $$ ";sleep 30000;

das gibt es mir aus.

[1] 31613
ch1 31603 5304
par 31613 5304
ch2 31603 5304

Ähnliche fragen