*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 |