/proc/<pid>/exe
não segue a semântica normal para links simbólicos. Tecnicamente, isso pode ser considerado uma violação do POSIX, mas /proc
é um sistema de arquivos especial, afinal.
/proc/<pid>/exe
parece ser um symlink quando você usa stat
. Esta é uma maneira conveniente para o kernel exportar o nome do caminho que ele conhece para o executável do processo. Mas quando você realmente abre esse "arquivo", não há nenhum procedimento normal de ler o seguinte o conteúdo de um link simbólico. Em vez disso, o kernel apenas fornece acesso à entrada de arquivos abertos diretamente.
Observe que quando você ls -l
a /proc/<pid>/exe
pseudofile para um processo cujo executável foi excluído, o destino do symlink tem a string "(deleted)" no final dele. Isso normalmente não seria sensitivo em um symlink: definitivamente não existe um arquivo que mora no caminho de destino com um nome que termina com "(deleted)".
tl; dr A implementação do sistema de arquivos proc
apenas faz sua própria mágica com a resolução do nome do caminho.