exec() , spawn() , fork()
- POSIX를 지원하는 함수 = posix_spawn()
- 각 함수 별 차이
- exec() : 호출하는 process는 중지되고 호출되는 process는 동작함.
- spawn() : 호출하는 process 중지 안됨. 호출되는 process도 동작함.
- Process ID는 새롭게 추가됨.
- spawn() 함수의 인자값으로 들어있는 프로세스를 호출함.
- fork()
- 현재 프로세스를 복제
- PID와 fork()의 리턴 값은 달라지게된다
- 메모리를 부모 process와 동일하게 할당 받기 때문에 부모 process가 이미 큰 메모리를 할당 받고 있다면 문제가 생길 수 있다
- 메모리 뿐 아니라 다른 자원도 동일하게 사용 하기 때문에 공유 자원의 문제가 발생 할 수 도 있다
- 부모 프로세스의 쓰레드가 mutex lock 상태이면 데드락 발생
- posix_spawn
- posix_spawn()/posix_spawnp() : 자식 프로세스 생성
- 어떻게 , 어떤 자식 프로세스를 실행 시킬지 결정 가능
- posix_spawnattr_t : spawn 속성 지정, API로만 접근 가능
- posix_spawn_file_actions_t : file 작업 지정, API로만 접근 가능
- 사용 방법
- posix_spawnattr_init() 로 속성을 기본값으로 지정
- 속성 지정
- posix_spawnattr_*() 호출로 해당 플래그 지정
- POSIX 플래그 지정
- posix_spawnattr_setflags() 호출
- QNX Neutrino flags 지정
- posix_spawnattr_setxflags() 호출