Se eu iniciar um processo e excluir o binário dele, ainda posso recuperá-lo 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 outro lado, se eu mesmo criar um link simbólico, exclua o destino e tente copiar:
cp: cannot stat ‘sleep’: No such file or directory
/proc
é uma interface para o kernel. Então, esse link simbólico realmente aponta para a cópia carregada na memória, mas com um nome mais útil? Como o exe
link funciona exatamente?
proc_exe_link()
noproc
sistema de arquivos: lxr.free-electrons.com/source/fs/proc/base.c?v=4.0#L1350De acordo com a página de manual do / proc, no Linux 2.2 e posterior, o arquivo é um link simbólico que contém o nome do caminho real do comando executado. Aparentemente, o binário é carregado na memória e
/proc/[pid]/exe
aponta para o conteúdo do binário na memória .Por outro lado, no Linux 2.0 e versões anteriores,
/proc/[pid]/exe
aparentemente é um ponteiro para o arquivo (no sistema de arquivos) que foi executado.Portanto, se você executasse a mesma lista de comandos no Linux 2.0 ou anterior, provavelmente você receberia um erro "sem esse arquivo ou diretório".
fonte