/proc/PID/fd에 있는 실행 가능한 바이너리 및 공유 라이브러리에 대한 파일 설명자?

/proc/PID/fd에 있는 실행 가능한 바이너리 및 공유 라이브러리에 대한 파일 설명자?

사용자 프로세스가 실행 파일 자체와 공유 라이브러리에 대한 파일 설명자를 예약합니까? 예를 들어, /proc/PID/fd// 외에도 bash최소한 다음이 표시될 것으로 예상됩니다.fdstdinstdoutstderr

  1. 하나를 위해/usr/bin/bash
  2. 문서용 /usr/lib/XXX/libc-2.XX.so사본 1부.

커널 기능에 따르면load_elf_binaryfd, 적어도 a 가 실행 파일에 할당된 경우 인 것 같습니다 .

그러나 실제로 폴더에는 그러한 fd항목이 없습니다 /proc/PID/fd. 아마도 존재하지 않기 때문일 것입니다 task_struct->files->fd_array. 따라서 질문은 다음과 같습니다.

  1. 커널은 file프로세스별 구조(예: / )에서 task_struct실행 파일 및 공유 라이브러리에 해당하는 개체에 대한 포인터를 저장 합니까 thread_info?
  2. 그렇다면 어떤 구조일까요?

답변1

아니요, 일반적으로 이러한 항목에 대한 파일 설명자가 없습니다. 그러나 /proc/PID/exe실행 중인 바이너리가 표시 되고 매핑된 항목이 어디에 있는지도 표시 /proc/PID/maps됩니다 . /proc/PID/map_files/그리고 이것이 존재하지 않더라도 커널은 이를 계속 추적할 수 있습니다. 커널 메모리의 모든 것이 /proc.

관련 정보