exec 명령은 Linux에서 지정된 명령을 호출하고 실행하는 데 사용됩니다. exec 명령은 일반적으로 쉘 스크립트에서 다른 명령을 실행하는 데 사용됩니다. 현재 터미널에서 exec 명령을 사용하면 지정된 명령은 새 하위 프로세스를 생성하는 대신 실행 후 현재 프로세스를 대체합니다.
옵션 | 의미 |
---|---|
-c | 실행하려면 빈 환경을 사용하세요 |
-아 | 쉘은 실행된 명령에 이름을 0개의 인수로 전달합니다 |
-l | 명령어에 매개변수를 전달하려면 쉘 시작 부분에 대시를 넣으세요 |
1. 시스템 호출 exec는 원래 프로세스를 새로운 프로세스로 대체하지만 프로세스의 PID는 변경되지 않습니다. 따라서 exec 시스템 호출은 새로운 프로세스를 생성하지 않고, 원래 프로세스 컨텍스트의 내용만 교체한다고 볼 수 있다. 원래 프로세스의 코드 세그먼트, 데이터 세그먼트 및 스택 세그먼트가 새 프로세스로 대체됩니다.
프로세스에는 주로 다음과 같은 측면이 포함됩니다.
2. exec는 extract와 execv로 시작하는 6개의 함수로 구성된 함수 클러스터입니다.
exec 시스템 호출을 실행하려면 일반적으로 fork() 함수를 사용하여 새 프로세스를 만든 다음 프로세스가 exec 호출을 실행하도록 합니다. 우리는 fork()가 새 프로세스를 생성한 후 상위 프로세스가 하위 프로세스와 코드 세그먼트를 공유하지만 데이터 공간은 분리되어 있지만 상위 프로세스는 자체 데이터 공간의 내용을 하위 프로세스에 복사한다는 것을 알고 있습니다. 컨텍스트도 하위 프로세스에 복사됩니다. 효율성을 높이기 위해 copy-on-write 전략을 채택합니다. 즉, 자식 프로세스가 생성될 때 부모 프로세스의 주소 공간은 복사되지 않고 부모 프로세스와 자식 프로세스는 공통 주소 공간을 가지며, 자식 프로세스가 데이터를 써야 하는 경우(예: 버퍼에 데이터 쓰기) 이때 주소 공간이 복사되고 버퍼가 자식 프로세스에 복사됩니다. 따라서 상위 프로세스와 하위 프로세스는 독립적인 주소 공간을 갖습니다. 이 전략은 fork() 이후 exec를 실행한 후 효율성을 크게 향상시킬 수 있습니다. 처음에 복사한 다음 exec 이후에는 하위 프로세스의 데이터가 폐기되고 새 프로세스로 대체됩니다.
위 내용은 리눅스 exec 명령 매뉴얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!