プロセスあたりで躓く…(テスト一週間前

#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
#include <stdio.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(void)
{
  int a = 0;
  pid_t pid;

  if((pid = fork()) == 0){
    puts("Child PID");
    a++;
    printf("a = %d\n&a = %p\n",a,&a);
    printf("getpid():%d\n",getpid());
    _exit(0);
  }else if(pid > 0){
    a=10;
    puts("Parent PID");
    printf("a = %d\n&a = %p\n",a,&a);
    printf("getpid():%d\n\n",getpid());
    _exit(0);
  }else{
    _exit(0);
  }
  return(0);
}
Parent PID
a = 10
&a = 0xbfe0d65c
getpid():27634

Child PID                                                                                                                                                    
a = 1
&a = 0xbfe0d65c
getpid():27635

なんのへんてつもないように見えるけど、
親プロセスが、&a = 0xbfe0d65cでさきに実行してるなら、
&aは10が代入されてます。
それから、子プロセスが1を出力しているからローカル変数だけど、
違うアドレス(よは0xbfe0d65cでないアドレス)が使われていると思ってました。
しかし、子プロセスの&a = 0xbfe0d65cという全く同じアドレスの変数をインクリメントしたら
ローカル変数a=0 + 1した形になってる。
(もし、同じアドレスでかつさきにaが代入されているならa=10 + 1だと思う…)

なんでなんでしょうか…。

gdb使って、検証しようと思ったけど、
普通に実行すると、子プロセスでのブレイクポイント無視されるし、
set follow-fork-modeにすると
親プロセスでのブレイクポイント無視されるし、
端的に言えば、慣れてないだけなんだけど嫌になったので、、
ぽてちせんせいとかじりずせんせいとかに聞こうっと、、

広告を非表示にする