티스토리 뷰

*공부 기록용으로 하는 블로그입니다.잘못된 개념이나 오타가 있을 수 있습니다. 잘못된 정보알려주시면 수정하겠습니다!*

 

fork()란?

   -fork함수는 운영체제에서 사용되는 시스템 콜 중 하나입니다.함수를 호출한 프로세스를 복사해 자식프로세스를 만드는 기능을 합니다. 즉 원래 프로세스는 부모 프로세스가 되는것이고 복사한 프로세스는 자식 프로세스가됩니다. fork 함수는 리턴값이 생성된 프로세스의 pid입니다. 즉 자식 프로세스의 pid값을 리턴하게 됩니다. 부모 프로세스에서는 pid가 자식프로세스의 pid값일 것이고, 자식프로세스는 0이 리턴됩니다. 이 자식프로세스는 부모프로세스와 동일한 코드, 데이터,힙을 공유하지만 스택은 따로 가집니다. 그래서 두 프로세스 모두 fork() 호출 이후의 코드를 똑같이 실행합니다.

 

int fork();  (부모프로세스 리턴값 -> 자식프로세스의 pid값(0보다 큰 값)  (자식프로세스 리턴값 -> 0) (에러 -> -1)

 

예시

 

pid_t pid;

pid = fork();

if(pid == 0){

   printf("hello! i'm child!");

   exit(0);

}

printf("hello! i'm parent!");

exit(0);

 

이 코드를 실행하면 

 

hello! i'm child!

hello! i'm parent!

 

or

 

hello! i'm parent!

hello! i'm child!

 

가 나옵니다. 이 순서가 뒤바뀔 수 있는 이유는 프로세스를 복사를 한후엔 동시에 실행 되기 때문에 부모와 자식 프로세스중 어느것이 먼저 실행되는지는 모릅니다. 만약 순서를 고정되게 하고 싶다면 둘이 시간차를 이용해 출력을 하게 하면 됩니다.

 

wait()함수

   -wait 함수는 부모 프로세스가 자식 프로세스가 종료될 때까지 기다리도록하는 시스템 콜입니다.이 함수를 호출하게 되면 부모 프로세스는 자식프로세스의 종료를 기다리며, 자식프로세스가 종료되었을 때, 종료 상태를 반환받게 됩니다.

pid_t wait (int *status);

   -반환형은 자식 프로세스의 ID이며, 입력인자는 자식프로세스 종료상태를 저장하기 위한 status포인터 변수입니다.status의 상태를 체크할 수있는 함수가 3개가 있습니다.

  1. WIFEXITED(status) : 자식 프로세스가 정상 종료했을때 참 리턴
  2. WEXITSATUS(status) : 자식프로세스의 반환값 리턴
  3. WIFSIGNALED(status) : 자식 프로세스가 시그널에 의해 종료한 경우 참 리턴

 

'OS' 카테고리의 다른 글

프로그램 -> 프로세스 변환과정 (컴파일)  (0) 2023.04.06
파일모드란?  (0) 2023.04.06
LR 파싱 과정  (0) 2023.04.04
cpu 명령어 모음  (0) 2023.03.30
링커(Linker)란?  (0) 2023.03.30
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함