fork() が親プロセスからメモリを複製する方法について、私はとても混乱しています。例を書いてそれを見つけようとしました:
int global_var = 0;
int main(int argc, char* argv[]){
int local_var = 1;
pid_t child;
child = fork();
if (child < 0){
cout << "Fork error: " << strerror(errno) << endl;
return 1;
}
if (child != 0 ){ // parent
cout << "Parent: global address: " << &global_var << endl;
cout << "Parent: local address: " << &local_var << endl;
++global_var;
++local_var;
cout << "Parent: global: " << global_var << endl;
cout << "Parent: local: " << local_var << endl;
}else{
cout << "Child: global address: " << &global_var << endl;
cout << "Child: local address: " << &local_var << endl;
sleep(1);
cout << "Child: global: " << global_var << endl;
cout << "Child: local: " << local_var << endl;
}
return 0;
}
そして、私は結果を見ました:
親: グローバル アドレス: 0x6021a0 親: ローカル アドレス: 0x7fff942dd99c 親: グローバル: 1 親: ローカル: 2 子: グローバル アドレス: 0x6021a0 子: ローカル アドレス: 0x7fff942dd99c 子: グローバル: 0 子: ローカル: 1
子の変数が親の変数と同じアドレスにあるにもかかわらず、子が変数の変更を認識しなかったのはなぜですか。誰かがこれを説明するのを手伝ってくれませんか。
前もって感謝します。