Eu tenho um programa a.out rodando em /tmp/test . Se eu listar /proc/$(pgrep a.out)/cwd
, é um link simbólico para /tmp/test .
Agora, eu vinculo /mnt/othertest em /tmp/test com mount -o bind /mnt/othertest /tmp/test
. Assim, esta nova montagem é empilhada e o antigo /tmp/test fica oculto.
Ainda assim, como o a.out foi lançado antes do comando mount, ele tem acesso ao caminho antigo.
O problema que quero resolver é como saber se um processo com cwd definido como /tmp/test se refere ao diretório de /mnt/othertest ou não.
Para arquivos abertos, é fácil, posso usar fdinfo do proc pseudo-filesyste e ler o mount id, mas não encontrei essas informações para cwd . Eu poderia verificar a hora de início do processo e compará-la com a hora em que o mount foi iniciado, mas devido a possíveis bifurcações, pode estar errado.
Chame e
stat(2)
no/proc/PID/cwd
outro diretório e compare-os peladevice:inode
tupla.Exemplo (observe que, a menos que seja fornecido o
-L
switch, ostat(1)
utilitário executará umalstat(2)
chamada de sistema em vez de umstat(2)
):Assim como os arquivos sob
/proc/PID/fd
,/proc/PID/cwd
não é um link simbólico real -- umopen(2)
,stat(2)
, etc. não seguirá seu destino, mas agirá diretamente no objeto real ao qual se refere.