fork - ggubuk97/apue GitHub Wiki
fork
๊ธฐ์กด ํ๋ก์ธ์ค๊ฐ ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ ์ค ํ๋. ์ด ํจ์๋ ์์ฑํ ์ ํ๋ก์ธ์ค๋ฅผ ์์ ํ๋ก์ธ์ค child process๋ผ ๋ถ๋ฅธ๋ค. ์ด ํจ์๋ ํ๋ฒ ํธ์ถ ๋๋ ๋๋ฒ ๋ฐํ ๋๋ค. ์์ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค(fork ๋ฅผ ์ํํ ํ๋ก์ธ์ค)์ ๋ณต์ฌ๋ณธ์ด๋ค. ์๋ฅผ ๋ค์ด ์์์ ๋ถ๋ชจ์ ์๋ฃ๊ตฌ์ญ๊ณผ ํ, ์คํ ์ ๋ณต์ฌ๋ณธ์ ๊ฐ์ง๋ค.
example 8.1
#include โapue.h"
int globvar = 6; /* external variable in initialized data */
char buf[] = "a write to stdout\n";
int main(void) {
int var;
pid_t pid;
/* automatic variable on the stack */
var = 88;
if (write(STDOUT_FILENO, buf, sizeof(buf)-1) != sizeof(buf)-1)
err_sys("write errorโ);
printf("before fork\nโ);
if ((pid = fork()) < 0) {
err_sys("fork error");
} else if (pid == 0) {
printf("child process\n");
globvar++;
var++;
} else {
printf("parent process\n");
sleep(2);
/* we donโt flush stdout */
/* child */
/* modify variables */
/* parent */
}
printf("pid = %ld, glob = %d, var = %d\n",(long)getpid(),globvar,var);
exit(0);
}
์คํ ๊ฒฐ๊ณผ
$ ./8.1.out
a write to stdout
before fork
parent process
child process
pid = 2596, glob = 7, var = 89 // child์ ๋ณ์๋ค์ ๋ฐ๋๋ค.
pid = 2595, glob = 6, var = 88 // parent์ ๋ณ์๋ค์ ๋ฐ๋์ง ์๋๋ค.
fork์ดํ์ ์์์ด ๋ถ๋ชจ๋ณด๋ค ๋จผ์ ์คํ ๋๋์ง(๋๋ ๋์ค์ ์คํ๋๋์ง)๋ ์์์๊ณ , ์์๋ ์ปค๋์ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.