What happened to my /proc/curproc/file?

John Baldwin jhb at freebsd.org
Tue Sep 4 19:13:00 UTC 2012


On Tuesday, September 04, 2012 7:10:42 am Sam Varshavchik wrote:
> Konstantin Belousov writes:
> 
> > The procfs links, as well as any other user of vn_fullpath(9) function,
> > can only translate a vnode to path if namecache contains useful data.
> > As such, the facilities are not guaranteed to success all the time.
> >
> > In case of rmdir(2), UFS explicitely purges the cache for directory which
> > contained direntry of the removed directory. I suspect that you have
> > your test program binary located in the same directory which was the parent
> > of the removed one.
> 
> Correct. Looks like the same thing applies if I try to use sysctl to get  
> KERN_PROC_PATHNAME.
> 
> I need some reliable way to get a process's executable file's name, as long  
> as it's meaningful (the executable file hasn't been removed).

There isn't one.  What if the file is renamed, or what if it was executed via
a symlink that has been removed?  What if there are multiple hard links, which
one is the "correct" path to return?  The namecache bits are a best effort, but
if those are purged, the only approach are left with is a brute-force crawl of
the filesystem looking for a file whose stat() results match your executable.

-- 
John Baldwin


More information about the freebsd-hackers mailing list