/ proc / <pid> / exe 심볼릭 링크는 일반 심볼릭 링크와 어떻게 다릅니 까?


23

프로세스를 시작한 다음 이진 파일을 삭제해도 다음에서 복구 할 수 있습니다 /proc/<pid>/exe.

$ cp `which sleep` .
$ ./sleep 10m &
[1] 13728
$ rm sleep
$ readlink /proc/13728/exe                           
/tmp/sleep (deleted)
$ cp /proc/13728/exe ./sleep-copy
$ diff sleep-copy `which sleep` && echo not different
not different
$ stat /proc/13728/exe 
  File: ‘/proc/13728/exe’ -> ‘/tmp/sleep (deleted)’
  Size: 0           Blocks: 0          IO Block: 1024   symbolic link

반면에 직접 심볼릭 링크를 만들면 대상을 삭제하고 복사를 시도하십시오.

cp: cannot stat ‘sleep’: No such file or directory

/proc커널에 대한 인터페이스입니다. 그렇다면이 심볼릭 링크는 실제로 메모리에로드 된 사본을 가리 키지 만보다 유용한 이름이 있습니까? 어떻게합니까 exe링크 작업은 정확히?

답변:


19

/proc/<pid>/exe심볼릭 링크의 일반 의미를 따르지 않습니다. 기술적으로 이것은 POSIX 위반으로 간주 될 수 있지만 결국 /proc특별한 파일 시스템입니다.

/proc/<pid>/exe당신이 stat그것을 할 때 심볼릭 링크 인 것처럼 보입니다 . 이것은 커널이 프로세스 실행 파일에 대해 알고있는 경로 이름을 내보내는 편리한 방법입니다. 그러나 실제로 "파일"을 열면 다음 심볼릭 링크 내용을 읽는 일반적인 절차는 없습니다. 대신 커널은 열린 파일 항목에 직접 액세스 할 수 있습니다.

공지 사항 그 때 실행 된 심볼릭 링크의 대상을 삭제 그것의 끝에 "(삭제)"문자열을 가진 프로세스에 대한 가상 파일 (pseudofile). 이것은 일반적으로 심볼릭 링크에서 무의미합니다. 대상 경로에 "(삭제됨)"으로 끝나는 이름의 파일이있는 파일은 없습니다.ls -l/proc/<pid>/exe

TL; DRproc 파일 시스템 구현은 단지 경로 해상도 자신의 마법의 일을한다.


1
그리고 마법 proc_exe_link()proc파일 시스템에 존재합니다 : lxr.free-electrons.com/source/fs/proc/base.c?v=4.0#L1350
Stephen Kitt

그런 이름을 가진 파일이 없다는 것을 어떻게 알 수 있습니까? 누군가 실험으로 하나를 만들었을 수도 있습니다. 전에 한 번 해봤습니다. 다른 이유로 존재할 가능성은 없지만 여전히 불가능하지는 않습니다.
flarn2006

4

/ proc의 man 페이지에 따르면 Linux 2.2 이상에서 파일은 실행 된 명령의 실제 경로 이름을 포함하는 기호 링크입니다. 분명히, 바이너리 메모리,에로드 /proc/[pid]/exe바이너리의 내용에 지점 메모리 .

반면, Linux 2.0 및 이전 버전에서는 실행 된 파일 (파일 시스템의)에 /proc/[pid]/exe대한 포인터 입니다.

따라서 Linux 2.0 또는 이전 버전에서 동일한 명령 목록을 실행 한 경우 "해당 파일이나 디렉토리가 없습니다"라는 오류가 표시 될 수 있습니다.


어떤 맨 페이지? linux.die.net/man/5/proc and manpages.ubuntu.com/manpages/utopic/en/man5/proc.5.html "파일을 열려고하면 실행 파일이 열릴 것"이라고 말하지만 어디에 있는지는 말하지 않습니다. 에서 오는.
muru

1
커널 이 메모리 복사본보다 바이너리 에 대한 inode 의 내용을 제공한다고 확신합니다 . 메모리 내 사본에 파일의 모든 섹션이 포함되어 있지 않을 수 있습니다. 반면에 inode는 참조 횟수로 계산되며 참조가있는 동안 덮어 쓰지 않습니다. 커널은 파일 실행에 대한 참조를 유지하므로 필요한 경우 추가 섹션을로드 할 수 있습니다.
Mark
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.