no swim no life
fork, exec, system 프로세스 관련 함수 본문
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