Backend/OS★

Process 생성

petitCoding 2011. 5. 26. 11:37




*fork()를 이용해 새로운 task를 생성한다

<예제>
1 :  #include <sys/types.h>
2 :  #include <unistd.h>
3 :  #include <stdio.h>
4 :
5 :  main()
6 :  {
7 :     pid_t pid;
8 :     printf("Hello, my pid is %d\n", getpid());
9 :     if((pid=fork())<0){
10 :        perror("fork error"); exit(1);
11 :     }else if(pid == 0){    //자식이 수행될 경우, 0을 리턴
12 :        printf("child: pid = %d, ppid = %d\n", getpid(), getppid());
13 :     }else{                    //부모가 수행될 경우, 자식의 pid 리턴
14 :        printf("parant: I created child with pid = %d\n", pid);
15 :     }
16 :
17 :     printf("Bye, my pid is %d\n", getpid()); //두번 수행됨
18 :  }
 
 
<결과화면>

 







*Task(Process) 생성 방법
 

1. fork
 
- 부모 태스크의 메모리 영역 복사
- 부모 태스크의 정보(file descriptor, signal등 복사)
 
2. vfork
 
 - 부모 태스크의 메모리 영역 공유
 - 자식 프로세스는 exec나 exit호출을 할때까지 부모 프로세스의 메모리 영역에서 실행되며, 부모 프로세스는 실행을 멈춘다
 - 자식 프로세스에서의 변경이 부모 프로세스에게 영향을 준다
 - 자식 프로세스는 _exit호출로 종료해야 한다
 - 보통 execve()와 함꼐 사용
 
3. clone
 
 - Linux에서의 thread 생성
 



'Backend > OS★' 카테고리의 다른 글

Task Scheduling  (0) 2011.05.26
쓰레드 동기화 (Synchronization)  (0) 2011.05.26
쓰레드(Thread)  (0) 2011.05.26
프로세스 (Process)  (0) 2011.05.26
인터럽트  (0) 2011.05.26