no swim no life

fork, exec, system 프로세스 관련 함수 본문

work/fundamental

fork, exec, system 프로세스 관련 함수

달려간다 2009. 1. 31. 13:58

ref. Advence Linux System Network Programming

fork

부모(parent)와 자식(child) 프로세스로 분기. fork로 프로세스가 복제될 때 자식 프로세스가 상속받는 것들은 메모리 영역과 파일 기술자, 시그널 마스크 등과 같은 정적인 자원들이다.
wait/waitpid로 자식 프로세스의 리턴값을 확인 할 수 있다.

fork의 리턴값

  • 0 : 자식 프로세스에게 리턴
  • 0 > : 부모 프로세스에게 리턴되며, 자식 프로세스의 PID
  • < 0 : 에러
ret = fork();

switch( ret )
{
    case 0: // 자식 프로세스
        do_child();
        break;
    case -1: // Error
    	do_error();
    	break;
    default: // 0> 부모 프로세스
    	do_parent();
    	break;
}

exec

PID등은 변하지 않고, 현재 실행 중인 프로세스의 이미지를 새로운 프로세스로 대체. 
따라서, execl() 함수 이후의 코드는 실행되지 않는다.

관련 함수

  • execl, execlp, execle, execv, execvp

system

쉘을 실행시켜서 프로그램을 실행시킨다. 명령어가 실행되는 동안 함수는 블록되며, 자식 프로세스의 정지/종료를 통보해주는 시그널인 SIGCHLD는 블록되어지며, SIGINT, SIGQUIT 시그널은 무시된다.
system은 이런 시그널 블록킹이 되어 외부에서 종료할 수 없게 하므로 종종 프로세스를 죽일 수 없게되는 단점이 있으므로, fork 이후 exec 함수를 호출하는 방법으로 대체하는 경우가 많다.

 

'work > fundamental' 카테고리의 다른 글

readv, writev 벡터 입출력  (0) 2009.01.31
매개변수(parameter)와 인수(argument)  (0) 2009.01.31
표준안 및 호환성 지정 매크로  (0) 2009.01.31
Comments