OS 공부 1주차 - 2

suntlee·2020년 12월 13일
0

Process API

fork()

새로운 프로세스를 생성하는 방법.

실행동작

  • 호출한 프로세스(parent)와 (거의) 같은 복사본(child) 생성
  • fork()를 호출한 위치에서부터 실행됨
  • fork()의 리턴 값이 부모와 다름
    • 부모 프로세스에서의 리턴 값은 자식의 PID.
    • 자식 프로세스에서의 리턴 값은 0.

부모와 자식 중 누가 먼저 실행될지는 모른다. Scheduler에 따라 다르다.

wait()

이 함수는 자식 프로세스가 종료할 때 리턴됨.

부모와 자식 중 누가 먼저 실행할지 결정할 수 있음.

exec()

이 함수를 사용하면 새로운 프로세스를 실행한 뒤, 다른 프로그램을 실행할 수 있음. 새로운 코드, 데이터를 로드하고 heap과 stack을 다시 초기화함.

exec 함수 모음

int execl(char const *path, char const *arg0, ...);
int execle(char const *path, char const *arg0, ..., char const *envp[]);
int execlp(char const *file, char const *arg0, ...);
int execv(char const *path, char const *argv[]);
int execve(char const *path, char const *argv[], char const *envp[]);
int execvp(char const *file, char const *argv[]);

fork()와 exec()를 분리한 이유?

Shell에서 fork() 실행 후 실행 환경을 변경하여 exec()으로 새로운 프로세스 실행할 수 있다.

Shell은 fork() -> exec() -> wait() 순으로 실행

fork() 후 redircetion 가능

Process Control and Users

Signal: 프로세승에게 보내는 지시

예) SIGINT(interrupt), SIGTSTP(stop)

프로세스는 signal() 함수로 signal를 전달받아 대응할 수 있다.

User는 자기 소유의 프로세스에만 signal를 보낼 수 있다.

profile
코딩물개

관심 있을 만한 포스트

0개의 댓글