fork 관련 질문 올립니다.
첨부 파일에 관해서 질문올립니다.
결과가 파일 맨 위에 나오는데
도저히 왜 저렇게 나오는지 모르겠습니다 ㅜㅜ
a write to stdout
before fork
my pid:9902 ppid : 9900
pid = 9902, glob = 7 var = 89
my pid:9903 ppid : 9901
pid = 9903, glob = 7 var = 89
pid = 9900, glob = 6 var = 88
pid = 9901, glob = 6 var = 88
minyoub@ubuntu:~/code/sys_prog/fork_test/g_val$ vim upgrade_g_val.c
1 #include
2 #include
3 #include
4
5 int glob = 6;
6 char buf[] = "a write to stdout\n";
7
8 int main( void )
9 {
10 int var = 88;
11 pid_t pid;
12
13 // printf("write : %d\n", write(STDOUT_FILENO, buf, sizeof(buf)));
14
15 if( write(STDOUT_FILENO, buf, sizeof(buf)) != sizeof(buf) )
16 {
17 perror("write error\n");
18 }
19
20 printf("before fork \n");
21
22 if( ( pid = fork() ) < 0 ){
23 perror(" fork error \n");
24 exit(1);
25 }
26 else if( ( pid = fork() ) == 0 ){
27 printf("my pid:%d ppid : %d \n", getpid(), getppid() );
28 glob++;
29 var++;
30 }
31 else
32 sleep(2);
33
34 printf("pid = %d, glob = %d var = %d \n", getpid(), glob, var );
35
36 return 0;
37
38
39 }
첨부 | 파일 크기 |
---|---|
Cap 2013-11-17 15-17-10-044.jpg | 114.91 KB |
fork()가 일어나면 현프로세스가 복제된
fork()가 일어나면 현프로세스가 복제된 자식프로세스가 만들어집니다. 전역변수, 로컬변수 등도 모두 복제됩니다. 이후에 자식프로세스에서 전역변수인 glob과 로컬변수인 var를 변경하더라도 그것은 복사본에서 일어나는 변화일뿐 그 변화가 부모프로세스에 파급되지는 않습니다.
지금의 실행결과는 이 사실을 잘 보여주는 것 같은데요. 예상하던 결과가 어떤 차이가 있나요?
댓글 달기