내 잡다한 노트

프로세스 생성 시스템 콜 본문

운영체제

프로세스 생성 시스템 콜

peanutwalnut 2023. 3. 20. 14:35

fork()

부모 프로세스가 자식 프로세스를 만드는 시스템 콜.

자식 프로세스는 부모 프로세스의 데이터를 모두 복사해서 가지고 있는다.

fork가 실행된 이후부터 자식 프로세스는 실행을 하게 된다.

리턴값으로 pid가 나오는데 이때 0이면 자식프로세스이고 0보다 크다면 부모 프로세스이다.

헤더 파일은 <unistd.h>

함수 원형 : pid_t fork(void) // pid도 pid_t로 선언해야함.

 

exec ()

이 시스템콜을 호출한 현재 프로세스 공간의 TEXT, DATA, BSS 영역을 새로운 프로세스의 이미지로 덮어씌운다.

별도의 프로세스 공간을 만들지 않는다. 이 말이 뭐냐면 프로세스 안에서 exec() 실행을 하면 새로운 프로세스를

만드는게 아니라 현재 만들어진 exec 인자에 들어가 존재하는 프로그램 실행 파일을 읽어서

현재 부모 프로세스 공간의 exec 인자에 있는 실행파일에 대한 TEXT, DATA, BSS 영역을 덮어 씌운다.

 

관련된 시스템 콜로는 기본적으로 6가지가 있음. int execl, execlp, execle, execv, execvp, execve 

execl("/bin/ls", "ls", "-al", NULL)

/bin/ls 가 전체 실행파일 path이고, 2, 3번째 인자는 각각 argv[0], argv[1]에 해당하는 내용이다. argv는 명령어 인수 리스트

끝에는 무조건 NULL을 쓰게 돼있다.

 

exit ()

 

wait()