Si inicio un proceso y luego elimino el binario del mismo, aún puedo recuperarlo de /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
Por otro lado, si yo mismo hago un enlace simbólico, elimino el objetivo e intento copiar:
cp: cannot stat ‘sleep’: No such file or directory
/proc
es una interfaz para el kernel. Entonces, ¿este enlace simbólico realmente apunta a la copia cargada en la memoria, pero con un nombre más útil? ¿Cómo exe
funciona exactamente el enlace?
proc_exe_link()
elproc
sistema de archivos: lxr.free-electrons.com/source/fs/proc/base.c?v=4.0#L1350Según la página de manual de / proc, en Linux 2.2 y posterior, el archivo es un enlace simbólico que contiene el nombre de ruta real del comando ejecutado. Aparentemente, el binario se carga en la memoria y
/proc/[pid]/exe
apunta al contenido del binario en la memoria .Por otro lado, bajo Linux 2.0 y versiones anteriores,
/proc/[pid]/exe
aparentemente es un puntero al archivo (en el sistema de archivos) que se ejecutó.Entonces, si ejecutó la misma lista de comandos en Linux 2.0 o anterior, presumiblemente obtendría un error "no existe tal archivo o directorio".
fuente