Dette er ikke det samme som et par af de andre udstationerede punkter, der omhandler sub-proces PID (at jeg så alligevel).
Hvis zot indeholder:
echo "vigtigste mypid: $ $ - lastpid: $!"
(
echo "block mypid: $ $ - lastpid: $! - PPID: $ PPID"
ps-ef> xxx
sove 5
echo "block mypid: $ $ - lastpid: $! - PPID: $ PPID"
) &
echo "vigtigste mypid: $ $ - lastpid: $! - PPID: $ PPID"
sove 6
Derefter: ksh zot (under Solaris og MKS) resulterer i:
vigtigste mypid: 7318 - lastpid:
blok mypid: 7318 - lastpid: - PPID: 607
vigtigste mypid: 7318 - lastpid: 7.320 - PPID: 607
blok mypid: 7318 - lastpid: - PPID: 607
Det overrasker mig, at i ugrenede barn proces, at $ $ stadig returnerer pid af de vigtigste proces. dvs både vise $ $ som 7.318 - Jeg ville have forventet, at barnet har $ $ er $ 7.320. (Du kan ignorere PPID - jeg søgte på beslægtede begreber.)
Hvis du gør: "grep 7.320 xxx" får du:
root 7320 7318 0 13:59:45 pts / 9 0:00 ksh zot
root 7321 7320 1 13:59:45 pts / 9 0:00 ps-ef
hvilket klart viser, at barnet proces, og hvis du var til "kill -9", at pid inden 5 sekunder løber ud, vil du ikke få den anden blok linje.
Min hensigt var for barnet proces til at optage sine egne pid i stedet for den forælder, gør det på dens vegne. Jeg er klar over, at den forælder kan bruge $! men hvorfor kan barnet ikke bruge $ $ for sin egen PID? Af den måde, hvis du udpakke den blok af kode og læg dem i en separat fil og kalder det, så du får de forventede resultater.
Tak på forhånd for enhver indsigter.
Michel