[prev in list] [next in list] [prev in thread] [next in thread]
List: freebsd-hackers
Subject: Re: Path to executable of current process?
From: Peter Jeremy <peterjeremy () optushome ! com ! au>
Date: 2007-07-20 11:12:09
Message-ID: 20070720111209.GV1176 () turion ! vk2pj ! dyndns ! org
[Download RAW message or body]
On 2007-Jul-19 22:00:23 -0400, Michael B Allen <ioplex@gmail.com> wrote:
>Well I figured out how to get kvm_getargv working. Unfortunately it
>seems only root can call kvm_open so the faulting process can't
>backtrace unless it so happens to be running as root (which it's not).
>
>Is there any way to get argv[0] for the current process without being root?
I suggest you have a look at the source to ps - it does not run with
elevated privileges.
Note that argv[0] is not necessarily a full pathname - it is whatever
the program was invoked with. Even if it _is_ a full pathname, there
is no guarantee that it points to the same object - the executable may
be in a chroot environment or that pathname may have been replaced.
The only guaranteed way to access the executable associated with a
running process is via procfs. As you point out earlier, this is
not mounted by default on FreeBSD because none of the base system
utilities need it (apart from 'ps -e') - you will need to arrange
for it to be mounted.
On 2007-Jul-19 23:23:45 -0400, Michael B Allen <ioplex@gmail.com> wrote:
>After more digging I see sysctl seems to be the way to do this but can I
>get the full path to the executable form kinfo_proc?
>
>How does ps do this?
It uses kvm_getargv(3). If you want to do it directly via sysctl(2),
I suggest you examine /usr/src/lib/libkvm/kvm_proc.c.
> mib[2] = KERN_PROC_PID;
This should be KERN_PROC_ARGS
> len = sizeof(struct kinfo_proc);
> if (sysctl(mib, 4, &ki_proc, &len, NULL, 0) == -1)
And the buffer argument should be char[], not struct kinfo_proc.
--
Peter Jeremy
[Attachment #3 (application/pgp-signature)]
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic