>  기사  >  백엔드 개발  >  C에서 fork()와 exec()의 차이점은 무엇입니까? fork()와 exec()의 간단한 비교

C에서 fork()와 exec()의 차이점은 무엇입니까? fork()와 exec()의 간단한 비교

青灯夜游
青灯夜游원래의
2019-04-01 15:02:006102검색

모든 애플리케이션(프로그램)은 실행 중인 프로그램 인스턴스인 프로세스를 통해 실행됩니다. 프로세스는 서로 다른 시스템 호출을 통해 생성되는데 가장 널리 사용되는 것은 fork()와 exec()입니다. 그렇다면 이들 사이의 차이점은 무엇입니까? 다음 글에서는 fork()와 exec()의 차이점을 소개하겠습니다. 도움이 되길 바랍니다.

C에서 fork()와 exec()의 차이점은 무엇입니까? fork()와 exec()의 간단한 비교

fork() in C 언어

pid_t pid = fork();

fork()는 호출 프로세스를 복사하여 새 프로세스를 생성하고 그 결과 새 PID가 생성되며 새 프로세스(하위 프로세스라고 함)가 호출입니다. 프로세스(상위 프로세스라고 함). 두 프로세스는 다음을 제외하면 거의 동일합니다:

 1. 하위 프로세스에는 고유한 프로세스 ID가 있으며 이 PID는 기존 프로세스 그룹의 ID와 일치하지 않습니다.

 2. 하위 프로세스의 상위 프로세스 ID는 호출 프로세스의 ID와 동일합니다.

 3. 자식은 부모의 메모리 잠금 및 세마포어 조정을 상속받지 않습니다.

 4. 자식은 부모로부터 완료되지 않은 비동기 I/O 작업을 상속하지 않으며 부모로부터 비동기 I/O 컨텍스트도 상속하지 않습니다.

fork() 반환 값

fork()는 어떤 매개 변수도 허용하지 않으며 정수 값을 반환합니다. 다음은 fork()가 반환하는 다양한 값입니다.

 ● 음수 값: 하위 프로세스를 생성하지 못했습니다.

● Zero: 새로 ​​생성된 하위 프로세스로 돌아갑니다.

●양수 값: 부모 또는 발신자에게 돌아갑니다. 이 값에는 새로 생성된 하위 프로세스의 프로세스 ID가 포함됩니다.

참고: 성공하면 하위 프로세스의 PID가 상위 프로세스에 반환되고 하위 프로세스에는 0이 반환됩니다. 실패하면 상위 프로세스에서 -1이 반환되고 하위 프로세스는 생성되지 않으며 errno가 적절하게 설정됩니다.

C 언어의 exec()

exec() 함수 시리즈는 현재 프로세스 이미지를 새로운 프로세스 이미지로 대체합니다. 프로그램을 현재 프로세스 공간에 로드하고 진입점에서 실행합니다.

예: 아래 C 프로그램에서 execv()를 구현했습니다. exec() 시리즈는 다음 함수로 구성됩니다.

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ...,char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[],char *const envp[]);

fork()와 exec()의 차이점

1, )는 이를 호출한 프로세스의 복사본인 새 프로세스를 생성하고 시작합니다. exec()는 현재 프로세스 이미지를 다른(다른) 프로세스 이미지와 "데이터 세그먼트"로 대체합니다. 현재 프로세스의 ”, “스택 세그먼트” 및 “코드 세그먼트”가 새 프로그램에 의해 다시 작성되었습니다.

2. Fork()는 새 프로세스를 생성하고 새 PID를 생성하므로 하위 프로세스는 자체 프로세스 ID를 갖습니다. exec는 새 프로그램을 시작하고 원래 프로세스를 대체하므로 새 프로그램은 exec()를 호출하는 프로세스의 ID를 변경하지 않고 유지합니다. 즉, exec에 의해 실행되는 새 프로세스의 PID는 변경되지 않으며 프로세스와 동일합니다. exec 함수를 호출합니다.

3. fork() 이전에 상위 프로세스에서 열린 파일 설명자는 하위 프로세스에서도 열리고 동일한 파일 테이블 항목을 가리킵니다. 그러나 exec()를 호출하기 전에 열린 설명자는 계속 열립니다.

추천 동영상 튜토리얼: "C 언어 튜토리얼"

위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다. 더 흥미로운 내용을 보려면 PHP 중국어 웹사이트의 관련 튜토리얼 열을 주의 깊게 살펴보세요! ! !

위 내용은 C에서 fork()와 exec()의 차이점은 무엇입니까? fork()와 exec()의 간단한 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.