>  기사  >  운영 및 유지보수  >  리눅스에서 포크와 exec의 차이점은 무엇입니까

리눅스에서 포크와 exec의 차이점은 무엇입니까

WBOY
WBOY원래의
2022-05-17 15:52:352599검색

Linux에서 포크와 exec의 차이점: 1. 포크는 하위 프로세스라고 하는 새 프로세스를 만드는 데 사용되는 반면 exec는 현재 프로세스의 모든 내용을 지정된 프로그램으로 대체합니다. 2. 전후의 프로세스 ID exec는 변경하지 않으며, 포크가 하위 프로세스를 다시 만든 후 ID가 변경되었습니다.

리눅스에서 포크와 exec의 차이점은 무엇입니까

이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.

Linux에서 fork와 exec의 차이점은 무엇인가요?

fork와 exec는 모두 프로세스 관련 호출입니다.

fork

fork를 호출하면 하위 프로세스라는 새로운 프로세스가 생성될 수 있고, 해당 프로세스는 해당 포크를 호출하는 프로세스를 생성할 수 있습니다. 상위 프로세스와 하위 프로세스에 대한 모든 것은 pcd(프로세스 제어 모듈)를 제외하고는 상위 프로세스와 동일합니다. 두 프로세스 모두 메모리에 쓰지 않으면 두 프로세스는 프로세스의 메모리 페이지를 공유합니다. 표면적으로는 fork로 생성된 프로세스가 exec로 생성된 프로세스보다 빠른 것처럼 보이지만 두 프로세스 중 하나가 메모리를 수정하는 한 메모리 페이지는 이전에 자식 프로세스에 복사됩니다.

exec

exec를 호출하여 프로세스를 생성하는 것은 실제로는 프로세스를 생성하는 것이 아닙니다. 정확히 말하면 exec를 호출한 후 exec에 지정된 실행 파일이 로드됩니다. exec를 호출하는 프로세스의 공간과 exec를 호출하는 프로세스가 로드됩니다. exec에 지정된 실행 파일의 내용으로 메모리가 업데이트됩니다. 차이점

fork는 주로 Linux에서 새로운 프로세스(스레드)를 생성하도록 설계되었습니다. exec() 일련의 함수는 지정하는 데 사용됩니다. 프로그램은 현재 프로세스의 전체 내용을 대체합니다. 따라서 exec() 일련의 함수는 처음 세 함수를 사용하여 새로운 프로그램 실행 환경을 구축한 후에 호출되는 경우가 많습니다. init 프로세스를 사용하여 다른 프로세스를 시작하는 Linux 프로세스는 일반적으로 다음과 같습니다.

fork는 가장 간단한 호출이며 매개 변수가 필요하지 않으며 단지 하위 프로세스를 생성하고 상위 프로세스와 독립적인 공간을 생성합니다.

fork 함수를 사용하여 새 프로세스를 만든 후 다른 프로그램을 실행하기 위해 새 프로세스에서 exec 함수를 호출하는 경우가 많습니다(예를 들어 프로그램을 작성할 때 작성한 프로그램의 기능을 사용해야 함) 이런 식으로 실행 가능한 프로그램을 직접 호출하면 프로그램을 크게 단순화할 수 있습니다. 프로세스가 exec 함수를 호출하면 해당 프로세스는 완전히 새로운 프로그램으로 대체됩니다. exec 함수를 호출해도 새로운 프로세스가 생성되지 않으므로 이전 프로세스와 다음 프로세스의 ID는 변경되지 않았습니다.

부모 프로세스는 fork()를 통해 동일한 자식 프로세스를 생성합니다. 생성된 자식 프로세스는 exec 함수를 사용하여 실행될 실제 프로세스를 실행하고 최종적으로 특정 기능을 수행할 수 있는 자식 프로세스가 됩니다.

프로세스가 exec 클래스 함수를 호출하면 시스템은 코드 세그먼트를 새 프로그램의 코드로 대체하고 원래 데이터 세그먼트와 스택 세그먼트를 삭제한 다음 새 데이터 세그먼트와 스택 세그먼트를 할당합니다. 새로운 프로그램. 스택 세그먼트에 남은 것은 프로세스 번호뿐입니다. 즉, 시스템에게는 여전히 동일한 프로세스이지만 이미 다른 프로그램입니다. 즉, exec 계열 함수를 호출한 후에는 후속 프로그램이 실행되지 않습니다.

추천 학습:

Linux 비디오 튜토리얼

위 내용은 리눅스에서 포크와 exec의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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