안녕하세요 아임코딩입니다.
이번에는 운영체제에서 등장하는 프로세스 관련 함수 중 하나인 fork() 함수에 대해서 알아보고 사용해보도록 하겠습니다.
fork() 함수는 현재 실행중인 프로세스를 그대로 복사하여 새로운 프로세스를 만드는 함수입니다.
즉, 해당 프로세스의 복사본이 만들어져 똑같은 프로세스가 두 개가 실행되는 것이죠.
윈도우에서 unistd.h 사용하기
윈도우 C언어로 fork() 함수를 사용해보려고 했는데, visual studio 에서는 불가능한 것 같았습니다.
fork() 함수를 사용하려면 <unistd.h> 에 저장되어있는 fork() 함수를 사용해야 하는데, 이 헤더가 visual studio에서는 작동하지 않았습니다.
그래서 구글링을 해보니 리눅스 환경에서 사용해야 <unistd.h> 를 사용할 수 있다고 하더랍니다..!
잘은 모르겠지만
https://blog.naver.com/datarget/222184659459
이 블로그에서 Cygwin 설치하는 방법대로 따라하니 윈도우 환경에서 리눅스 환경을 사용할 수 있었습니다.
MinGw 도 된다고 하던데 저는 안됐었습니다...
Cygwin 사용하기
그렇게 Cygwin 을 설치한 후 실행을 해보았더니, 이렇게 리눅스 환경을 사용할 수 있었습니다.
리눅스 환경에서는
vi 명령어를 이용한 C파일 수정
vi 명령어를 이용하여 c언어 파일을 만들 수 있습니다.
프로그램 코드
vi 명령어를 통해 fork() 를 사용해보기 위한 간단한 코드를 작성하였습니다.
#include <stdio.h>
#include <unistd.h>
int main(void) {
printf("X\n");
fork();
printf("Y\n");
fork();
printf("Z\n");
return 0;
}
이렇게 c파일을 만들고 나면 리눅스 환경에서는 컴파일을 해주어야 합니다.
컴파일 및 실행
컴파일을 하는 방법은
gcc 파일이름
저의 c파일 이름은 hello.c 이기 때문에 gcc hello.c 를 입력해주었습니다.
컴파일이 잘 수행되면, 자동으로 실행파일이 만들어집니다.
실행파일은 a.exe로 만들어지는데, 이를 실행하려면 명령어로 ./a.exe 를 입력해주면 됩니다.
X는 1개, Y는 2개, Z는 4개가 출력이 되는 것을 확인할 수 있습니다.
fork() 함수를 통해 프로세스가 만들어져서 Y는 두 개의 프로세스가 출력을 하기 때문에 두 개가 출력이 되었고,
Z는 Y 앞에서 만들어진 총 두 개의 프로세스가 각자 두 개씩 만들어져서 총 네 개의 프로세스가 Z를 출력한 것을 확인할 수 있습니다.
정리
fork() 함수를 이용하면 프로세스를 복사해 사용할 수 있습니다.
'운영체제' 카테고리의 다른 글
[운영체제] 프로세스란? (1) | 2024.04.30 |
---|---|
[운영체제] 폰 노이만 구조란? (0) | 2024.04.30 |