Sorry for the cross post but this is not an easy question I don't think....

Given:
Pid of a process is $$
Pid of a child process just spawned is $!
However a child process does not see $$ as it's pid but rather the pid of it's parent... How can the child process know it's own pid?

Example:
[root@mybox l]# cat backTest
function backGround() {
        echo "Pid $1 is $$"
}
function backGround_subshell() {
        echo "echo Pid $1 is $$"
}
echo "My pid is $$"
backGround 1 &
echo "BPid 1 is $!"
backGround 2 &
echo "BPid 2 is $!"
backGround 3 &
echo "BPid 3 is $!"
$(backGround_subshell 4) &
echo "BPid 4 is $!"
$(backGround_subshell 5) &
echo "BPid 5 is $!"
$(backGround_subshell 6) &
echo "BPid 6 is $!"
wait
echo
[root@mybox l]# bash backTest
My pid is 16712
BPid 1 is 16713
Pid 1 is 16712
BPid 2 is 16714
Pid 2 is 16712
BPid 3 is 16715
BPid 4 is 16716
BPid 5 is 16717
BPid 6 is 16719
Pid 4 is 16712
Pid 3 is 16712
Pid 6 is 16712
Pid 5 is 16712