반응형
Linux 에서 fork 를 이용한 프로그램 실행
프로세스 fork 개념
(UNIX legacy system 인) Linux 는 새로운 프로세스 생성을 위한 방법으로 fork 인터페이스를 제공한다. 우리는 어떠한 조건에 의해서 프로그램A 또는 프로그램B 가 동적으로 실행되는 경우, fork()를 통해 새로운 프로세스를 생성하고 선택하여 실행할 수 있다.
프로세스 fork 구현코드
현재 프로그램에서 fork 함수를 호출하면 부모프로세스와 자식프로세스로 분기된다. fork 함수의 반환값을 통해서 부모와 자식을 구분 가능하다. 아래의 코드 처럼 구현해보자.
pid = fork();
switch (pid)
{
case -1:
// fork 실패
break;
case 0:
// 자식 프로세스
execl(app_path, app_name, NULL, (gchar *)0);
g_error("execl failure");
break;
default:
// 부모 프로세스
break;
}
- 사용자 프로그램에서 fork 함수를 호출한다. 운영체제는 fork 명령을 받고 새로운 (자식)프로세스를 생성한다.
- fork 실패 시, -1 이 반환된다. (시스템 메모리 부족 등의 원인)
- fork 성공 시, 새로운 자식 프로세스는 case 0 부터 실행된다. execl 함수로 새로운 프로그램을 실행한다.
- 기존의 부모 프로세스는 default 에서 계속 실행된다.
참고자료
프로세스 fork 의 개념에 대해서 wiki 를 참고한다.
https://en.wikipedia.org/wiki/Fork_(system_call)
반응형