반응형
    
    
    
  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)
fork (system call) - Wikipedia
In computing, an operation whereby a process creates a copy of itself In computing, particularly in the context of the Unix operating system and its workalikes, fork is an operation whereby a process creates a copy of itself. It is an interface which is re
en.wikipedia.org
반응형