Jeśli rozpocznę proces, a następnie usunę jego plik binarny, nadal mogę go odzyskać z /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
Z drugiej strony, jeśli sam utworzę dowiązanie symboliczne, usuń cel i spróbuj skopiować:
cp: cannot stat ‘sleep’: No such file or directory
/proc
jest interfejsem do jądra. Czy to dowiązanie symboliczne faktycznie wskazuje na kopię załadowaną do pamięci, ale o bardziej przydatnej nazwie? Jak exe
dokładnie działa link?
proc_exe_link()
wproc
systemie plików: lxr.free-electrons.com/source/fs/proc/base.c?v=4.0#L1350Według strony podręcznika / proc, w Linuksie 2.2 i nowszych plik jest dowiązaniem symbolicznym zawierającym rzeczywistą nazwę ścieżki wykonanej komendy. Najwyraźniej plik binarny jest ładowany do pamięci i
/proc/[pid]/exe
wskazuje na zawartość pliku binarnego w pamięci .Z drugiej strony, pod Linuksem 2.0 i wcześniejszymi,
/proc/[pid]/exe
najwyraźniej jest wskaźnikiem do pliku (w systemie plików), który został wykonany.Więc jeśli uruchomiłeś tę samą listę poleceń w systemie Linux 2.0 lub wcześniejszym, prawdopodobnie wystąpiłby błąd „brak takiego pliku lub katalogu”.
źródło