현재 프로세스 이미지를 완전히 바꾸는 대신 exec 시스템 호출이 함수 호출처럼 반환되도록 하는 방법이 있습니까? 나의 동기는 호환되지 않는 언어를 사용하는 두 개의 쉘을 통합하려는 것이었습니다. 아이디어는 쉘 A가 쉘 B의 언어로 작성된 스크립트를 실행할 수 있고 쉘 B의 스크립트에 의해 환경 변수, 작업 디렉토리 등에 대한 변경 사항을 계속 유지할 수 있다는 것입니다.
지금까지 제가 생각할 수 있는 모든 솔루션에는 몇 가지 큰 한계가 있습니다.
첫 번째 해결책은 쉘 A가 쉘 B로 실행되도록 한 다음 쉘 B가 쉘 A로 다시 실행되도록 하는 것입니다.제가 예전에 이런 질문을 한 적이 있어요.. 문제는 현재 실행 중인 스크립트의 위치, 지역 변수, 별칭 등과 같은 초기 셸 A 프로세스의 모든 상태를 삭제한다는 것입니다.
두 번째 해결 방법은 쉘 A가 포크 실행을 사용하여 쉘 B를 전통적인 하위 프로세스로 실행하도록 하고, 쉘 B가 해당 환경을 직렬화한 후 종료하기 전에 이를 쉘 A 프로세스로 다시 보내도록 하는 것입니다. 이것의 두 가지 이점은 상위 프로세스의 상태를 보존하고 원하는 경우 함수 및 별칭과 같은 애플리케이션 수준 데이터를 직렬화할 수도 있다는 것입니다. 문제는많은 것들하위 프로세스는 상위 프로세스에서 상속되므로 그 중 하나를 직렬화하는 것을 잊지 않도록 하기가 어렵습니다.