fork
#include<sys/types.h>
#include<unistd.h>
pid_t fork(void);
기능 : 새로운 프로세스 생성
리턴
- 성공시 : (부모) 자식 프로세스의 PID, (자식) 0
- 실패시 : -1
- error값
EAGAIN : 시스템에서 허용
ENOMEM : 새로운 프로세스를 위한 swap 공간 부족
자식 프로세스의 메모리 공간
- 자식 프로세스를 프로세스 테이블에 등록. 메모리 할당.
- 텍스트(코드) 영역은 공유, 데이터, 힙, 스택 영역 복사.
- 변형시 복사(COW, copy-on-write) 사용.
- user struct의 file descriptor table이 복사.
- tms_utime, tms_stime, tms_cutime, tms_cstime은 0으로 초기화 - times함수로 확인가능.
용도
부모와 자식이 각각 다른 코드 부분을 동시에 실행할 때 - 네트워크 서버
새로운 프로그램을 실행할 때(exec) - shell
pid가 0인 프로세스
- hand crafted process. fork에 의해 생성되지 않음.
- 시스템 부팅시 생성.
vfork
- exec함수를 실행하기 위해 사용.
- 자식 프로세스가 항상 먼저 실행
- exec나 _exit호출을 할 때까지 부모 프로세스 메모리 영역에서 실행 : 부모 프로세스는 실행을 멈춤.
=> 권고사항 : 자식 프로세스는 부모의 값을 바꾸면 안 됨. 자식 프로세스는 리턴하면 안 됨.
'컴퓨터 공부 > Advanced UNIX System Programming' 카테고리의 다른 글
[5월 6일 1교시] 프로세스 제어 3 (0) | 2009.05.06 |
---|---|
[5월 1일 3교시] 프로세스 제어 2 (0) | 2009.05.01 |
[5월 1일 1교시] 메모리 관리 (0) | 2009.05.01 |
[4월 30일 3교시] 프로세스2 (0) | 2009.04.30 |
[4월 30일 2교시] 프로그램 개발 환경2 + 프로세스1 (0) | 2009.04.30 |