Detta är inte samma sak som några av de utstationerade andra punkter handlar om sub-process PID (som jag såg i alla fall).
Om Zot innehåller:
echo "main mypid: $ $ - lastpid: $!"
(
echo block "mypid: $ $ - lastpid: $! - PPID: $ PPID"
ps-ef> XXX
sova 5
echo block "mypid: $ $ - lastpid: $! - PPID: $ PPID"
) &
echo "main mypid: $ $ - lastpid: $! - PPID: $ PPID"
sova 6
Sedan: ksh Zot (under Solaris och MKS) resulterar i:
viktigaste mypid: 7318 - lastpid:
block mypid: 7318 - lastpid: - PPID: 607
viktigaste mypid: 7318 - lastpid: 7320 - PPID: 607
block mypid: 7318 - lastpid: - PPID: 607
Det förvånar mig att i kluven barnet processen, att $ $ fortfarande returnerar PID i huvudprocessen. dvs både visa $ $ som 7.318 - Jag hade förväntat att barnet har $ $ vara $ 7320. (Du kan ignorera PPID - Jag såg på relaterade begrepp.)
Om du gör: "grep 7.320 xxx" får du:
root 7320 7318 0 13:59:45 poäng / 9 0:00 ksh Zot
root 7321 7320 1 13:59:45 poäng / 9 0:00 ps-ef
vilket tydligt visar att barnet processen och om du skulle "kill -9" som pid innan 5 sekunder tar slut, skulle du inte få det andra blocket raden.
Min avsikt var att barnet processen att spela in sin egen pid snarare än föräldern göra det för dess räkning. Jag inser att föräldern kan använda $! men varför kan barnet inte använda $ $ för sin egen PID? Förresten, om du extrahera kodblock och lägga den i en separat fil och kalla det, då får de förväntade resultaten.
Tack på förhand för eventuella insikter.
Michel