Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Jul 2004 10:12:20 -0500
From:      Dan Nelson <dnelson@allantgroup.com>
To:        Joe Marcus Clarke <marcus@marcuscom.com>
Cc:        hackers@freebsd.org
Subject:   Re: Getting a fully-qualified path from a PID
Message-ID:  <20040721151220.GB42575@dan.emsphone.com>
In-Reply-To: <1090378066.90026.105.camel@shumai.marcuscom.com>
References:  <1090378066.90026.105.camel@shumai.marcuscom.com>

next in thread | previous in thread | raw e-mail | index | archive | help
In the last episode (Jul 20), Joe Marcus Clarke said:
> What is the canonical way for a userland application to get the
> fully-qualified path of an executable from its running PID?  I know I
> can do a readlink(2) on /proc/pid/file, but procfs is deprecated on
> 5.X, correct?  Is there a more appropriate way to do this?  Thanks.

realpath(argv[0]) works for commands not run from $PATH. Commands found
through a PATH earch will just have the basename in argv[0] so you
would have to check each PATH element until you found it.  Note that
/proc/pid/file won't work if vn_fullpath() fails (say the orignal file
has been unlinked, or the filename has expired from the kernel's
cache).

If you are examining another process, you can use the kvm_getargv() and
kvm_getenvv() functions to fetch argv[0] and PATH out of the target
process.

-- 
	Dan Nelson
	dnelson@allantgroup.com



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040721151220.GB42575>