다음과 같은 경우엔 어떻게 디자인하는게 가장 좋은가요?

실행 파일 A와 B를 포함하는 프로젝트가 있습니다.
프로그램 A는 프로그램 B를 실행시키고, B의 실행이 종료되길 기다렸다가 다시 일정 조건이 되면 다시 B를 실행, 종료하고... 이런걸 반복합니다. 즉, 프로그램 A는 fork () -> exec () -> wait () 하는 기법을 사용합니다.
A와 B를 하나로 합칠 수는 없는 상황이라고 가정합시다.
프로그램 A와 프로그램 B를 같이 배포한다고 가정합시다.
그러면 프로그램 A에서 프로그램 B의 경로를 알아야 exec ()을 할 수가 있는데요...
일반적으로 프로그램 B의 경로를 어떻게 알아내는게 일반적인가요?
몇 가지 경우의 수를 생각해보면...
1. execp ()를 사용한다. 즉, 환경변수 PATH를 뒤져서 프로그램 B의 경로를 알아낸다.
2. 프로그램 A의 환경설정 파일(예: ~/.A.conf)을 통해서 사용자가 프로그램 B의 경로를 설정하도록 한다.
3. 새로운 실행 파일 C를 만들고, 실행 파일 C의 끝부분에 파일A와 파일B를 더미 데이타로 덧붙인 후, 실행 파일 C만을 배포한다. 실행 파일 C를 실행시키면, 파일 A와 파일B를 적당한 temporary 디렉토리에 풀어놓고, A를 실행시킨다.
... 이렇게 생각해봤습니다만.. 각각의 단점 또는 문제점 생각해보자면...
1. 실행 파일 B의 이름이 변경되서 설치되는 경우, 프로그램 A에서 B를 제대로 찾지 못하게 됩니다. 사용자가 configure 단계에서 실행 파일에 접두사 또는 접미사를 붙여버리는 경우가 있을 수 있는데, 이럴 때 어떻게 대처해야 할 지 모르겠습니다.
2. 프로그램 B 경로 하나 때문에 환경설정 파일을 동반해야 한다는게 번거롭다는 생각입니다.
3. 3번과 같이 배포하는 구체적인 방법을 제가 알지 못합니다. 실제로 3번과 같은 방법으로 배포되는 프로젝트가 있는지, 실제 그러한 방법이 가능한지, 만약 가능하다면 관련 툴이 존재하는지 등등 아시는 분이 계시다면 알려주시면 감사드리겠습니다.
4번. 미리 정의한 환경변수
4번. 미리 정의한 환경변수 사용
PROGRAM_B_HOME=/some/where/in/the/world program_a
program_a는 PROGRAM_B_HOME 환경 변수를 읽어서 B의 위치를 알아내고요.
댓글 달기