free_parent 함수:
파일 디스크립터 닫기:
close(pipex->infile);
close(pipex->outfile);
부모 프로세스는 입력 파일과 출력 파일의 파일 디스크립터를 관리합니다. 이들을 닫아 리소스를 해제합니다.
cmd_paths 해제:
while (pipex->cmd_paths[i])
{
free(pipex->cmd_paths[i]);
i++;
}
free(pipex->cmd_paths);
cmd_paths는 환경 변수 PATH에서 추출한 디렉토리 경로들의 배열입니다. 이는 부모 프로세스에서 한 번 할당되어 모든 자식 프로세스에서 공유됩니다. 따라서 부모 프로세스에서 해제합니다.
free_child 함수:
cmd_args 해제:
while (pipex->cmd_args[i])
{
free(pipex->cmd_args[i]);
i++;
}
free(pipex->cmd_args);
cmd_args는 각 명령어의 인자들을 저장하는 배열입니다. 이는 각 자식 프로세스마다 다르게 할당되므로, 자식 프로세스에서 해제합니다.
cmd 해제:
free(pipex->cmd);
cmd는 실행할 명령어의 전체 경로를 저장합니다. 이 또한 각 자식 프로세스마다 다르게 할당되므로, 자식 프로세스에서 해제합니다.
주요 차이점:
파일 디스크립터: 부모 프로세스만 닫습니다. 자식 프로세스는 execve 호출 후 새 프로그램으로 대체되므로 별도로 닫을 필요가 없습니다.
cmd_paths: 모든 프로세스에서 공유되므로 부모 프로세스에서만 해제합니다.
cmd_args와 cmd: 각 자식 프로세스마다 다르게 할당되므로 자식 프로세스에서 해제합니다.
이러한 구조는 메모리 누수를 방지하고 리소스를 효율적으로 관리하기 위한 것입니다.
- 부모 프로세스:
- 명령어를 찾을 수 있는 모든 가능한 경로들(PATH 환경 변수에서 추출)을 관리합니다.
- 이는 pipex->cmd_paths에 저장됩니다.
- 이 정보는 모든 자식 프로세스에서 공유될 수 있는 정보입니다.
- 자식 프로세스:
- 실제 실행할 특정 명령어와 그 인자들을 관리합니다.
- pipex->cmd: 실행할 명령어의 전체 경로 (예: "/bin/ls")
- pipex->cmd_args: 명령어와 그 인자들의 배열 (예: {"ls", "-l", "/home", NULL})
자식 프로세스는 부모로부터 받은 경로 정보(cmd_paths)를 사용하여 실제 실행할 명령어의 전체 경로(cmd)를 찾고, 이를 인자들(cmd_args)과 함께 사용하여 새 프로그램을 실행합니다.이러한 구조는 효율성과 유연성을 위한 것입니다. 부모 프로세스가 모든 가능한 경로를 한 번만 찾아두면, 여러 자식 프로세스들이 이 정보를 재사용할 수 있기 때문입니다.
- cmd_paths:
- 이는 실행 가능한 프로그램들을 찾을 수 있는 모든 디렉토리 경로들의 배열입니다.
- 예: {"/usr/local/bin", "/usr/bin", "/bin", NULL}
- PATH 환경 변수에서 추출한 경로들입니다.
- cmd:
- 이는 실제 실행할 특정 명령어의 전체 경로입니다.
- 예: "/bin/ls"
- cmd_paths의 경로들을 검색하여 찾은 실제 실행 파일의 경로입니다.
cmd는 cmd_paths의 경로들을 이용해 찾은 결과입니다. 예를 들어, "ls" 명령어를 실행하려 할 때:
- cmd_paths에 있는 각 경로를 순회합니다.
- 각 경로에 "ls"를 붙여 실행 가능한 파일이 있는지 확인합니다.
- "/bin/ls"가 존재하고 실행 가능하다면, 이를 cmd에 저장합니다.
따라서 cmd_paths는 가능한 모든 경로를 포함하고, cmd는 그 중 실제 사용할 하나의 특정 경로를 나타냅니다.
'C Language' 카테고리의 다른 글
MiniLibX 라이브러리의 t_win_list 구조체 설명 (0) | 2025.01.22 |
---|---|
3차원 프로젝트에서 z 값에 대해서만 min_z를 두는 이유 (0) | 2025.01.21 |
자식 프로세스 파이프 알고리즘 (0) | 2025.01.21 |
get_cmd: cmd의 전체 경로 찾는 함수 (0) | 2025.01.21 |
STDIN_FILENO 의 정의 (0) | 2025.01.21 |