본문으로 바로가기

[리눅스] fork 란

category 운영체제/리눅스 2019. 10. 22. 21:36
728x90
반응형

지난 포스팅에서 프로세스에 대해 알아보았습니다.

오늘은 fork에 대해 알아보겠습니다.

fork는 프로세스를 복제하는 방법 입니다.

c언어에서 함수로도 쓰입니다.

 

 

 

 

 

 

이 때 복제한 원본 프로세스를 부모 프로세스라고 부르고, 복제된 프로세스를 자식 프로세스라고 부릅니다.

fork를 쓰는 이유는 바로 동시 처리 즉, 멀티태스킹을 위함입니다.

리눅스의 장점 중 하나가 바로 멀티 태스킹입니다.

부모 프로세스와 자식 프로세스는 독립적으로 실행되기 때문에 성능면에서 좋습니다.

그러나 단점은 프로세스가 많아짐에 따라 통신을 하는데 있어 자원 소모가 있다는 점입니다.

프로세스 복제 사용 예를 들자면 리눅스 쉘이 있습니다.

쉘에서 특정 명령어를 수행한다고 가정한다면, 쉘은 명령어를 받아 들인 후, fork로 자식프로세스를 만들고, 자식프로세스에서 명령어를 수행합니다.

fork에서 복제된 자식 프로세스는 부모 프로세스의 힙 메모리, 정적 메모리, IPC, 열린 파일, 시그널 등까지 복제합니다.

 

c에서 fork 함수에 대한 코딩법은 다음과 같습니다.

 

-----------------------------------------------------------------------

ret = fork();

if ( ret < 0 )

{

    /* 에러가 났을 경우 */
}

else if ( ret == 0 )

{

    /* 자식 프로세스인 경우 */

}

else

{

    /* 부모 프로세스인 경우 */

}

-----------------------------------------------------------------------

 

c에서는 위와 같이 자식프로세스, 부모프로세스, 에러 일 경우로 로직을 나눕니다.

 

728x90
반응형