컴퓨터 공부/Advanced UNIX System Programming

[5월 1일 2교시] 프로세스 제어 1

려리군 2009. 5. 1. 10:12

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호출을 할 때까지 부모 프로세스 메모리 영역에서 실행 : 부모 프로세스는 실행을 멈춤.

    => 권고사항 : 자식 프로세스는 부모의 값을 바꾸면 안 됨. 자식 프로세스는 리턴하면 안 됨.