#include \"apue.h\"
2
3 int glob=6;//why it just increment???
4 int
5 main(void)
6 {
7 int var=88;
8 pid_t pid;
9 char buf[] = \"hello worlds!\\n\";
10
11 if(write(STDOUT_FILENO, buf, sizeof(buf)) !=sizeof(buf))
12 err_sys(\"write error!!!\");
13
14 if( (pid=vfork())<0){
15 err_sys(\"fork error!!\");
16 }else if(pid==0){
17 var++;
18 glob++;
19 //_exit(0); child process exit
20 }//else
21
22 printf(\"glob : %d , var : %d pid : %d\\n\",glob, var, getpid());
23 //_exit(0);
24
25 return 0;
26
27 }
이거 컴파일해서 실행시키면은
hello worlds!
glob : 계속증가 var : 89 or -1081319768 pid : 고정값
이렇게 계속 반복되거든.. vfork()로 자식프로세스가 별도로 생성되면 부모메모리를 공유하게되는데... 왜 main함수내의 지역변수로 선언된
var는 한번 증가하고 계속 이상한값이 되고, glob은 계속 증가하게 되지..?? 왜 그렇지.ㅠ.ㅠ 계속 공유하게 되면 glob값증가할뿐더로
동시에 var 값도 계속 증가해야 되는 것 아닌가..? 궁금해 미치겠땅.ㅠㅠ
2
3 int glob=6;//why it just increment???
4 int
5 main(void)
6 {
7 int var=88;
8 pid_t pid;
9 char buf[] = \"hello worlds!\\n\";
10
11 if(write(STDOUT_FILENO, buf, sizeof(buf)) !=sizeof(buf))
12 err_sys(\"write error!!!\");
13
14 if( (pid=vfork())<0){
15 err_sys(\"fork error!!\");
16 }else if(pid==0){
17 var++;
18 glob++;
19 //_exit(0); child process exit
20 }//else
21
22 printf(\"glob : %d , var : %d pid : %d\\n\",glob, var, getpid());
23 //_exit(0);
24
25 return 0;
26
27 }
이거 컴파일해서 실행시키면은
hello worlds!
glob : 계속증가 var : 89 or -1081319768 pid : 고정값
이렇게 계속 반복되거든.. vfork()로 자식프로세스가 별도로 생성되면 부모메모리를 공유하게되는데... 왜 main함수내의 지역변수로 선언된
var는 한번 증가하고 계속 이상한값이 되고, glob은 계속 증가하게 되지..?? 왜 그렇지.ㅠ.ㅠ 계속 공유하게 되면 glob값증가할뿐더로
동시에 var 값도 계속 증가해야 되는 것 아닌가..? 궁금해 미치겠땅.ㅠㅠ
부모가 차일드에서 var증가 도중에 출력하는거아냐? 이래서 자바의 synchronized가 편하다니깐.
부모프로세스는 차일드 프로세스가 종료될떄까지 기다리는 구조인데, _exit(0)으로 차일드를 종료하는데 위 소스코드를 보면은 _exit(0)부분은 주석처리해서 차일드 프로세스 종료안되는 구조야!!