fork() 시 변수에 독립성?
글쓴이: BarracuTa / 작성시간: 화, 2005/07/12 - 7:19오후
부모와 자식 프로세스의 프로그램 변수들이 같은 초기값을 가지지만 서로 독립적으로 알고있습니다.
파일 기술자 ,pid를 제외한 모든 부분이 복사 되어져 서로다른 공간에 있게 된다고 생각이 드는데 아래 test의 경우 변수들에 포인터가 서로 같게 나타납니다. 즉 같은 공간을 사용한다고 볼수있는데
이거 어지럽군요...
같은 공간을 쓰고 있으니 자식 프로세서에서 변수값을 변경시 부모에서도 변경되어져야 할듯한데 그렇치도 않습니다..
어떻게 이런일 이 생길 수있는거죠?
#include <unistd.h> #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> int global=1; int main() { int i=2; pid_t pid; if((pid=fork())==0)//자식 { printf("I'm the child\n"); sleep(3); printf("global address :%p value: % d\n",&global,global); printf("local address :%p value: %d\n",&i,i); sleep(3); global=3; i=4; printf("change\n"); sleep(3); printf("global address : %p value: %d\n",&global,global); printf("local address :%p value:%d\n",&i,i); sleep(3); } if(pid>0) { wait((int*)0); printf("i'm the parent\n"); printf("global address : %p value: %d\n",&global,global); printf("local address : %p value: %d\n",&i,i); } if(pid<0) { perror("fork()"); exit(1); } return 0; }
Forums:
Virtual address를 쓰는 시스템에서, A 프로세스에서 주소 a
Virtual address를 쓰는 시스템에서, A 프로세스에서 주소 a가 의미하는 실제 physical address와, B 프로세스에서 주소 a가 의미하는 실제 physical address는 다릅니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기