Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 Aug 2006 10:09:35 -0400
From:      Mike Meyer <mwm-keyword-freebsdhackers2.e313df@mired.org>
To:        des@des.no (Dag-Erling =?iso-8859-1?Q?Sm=F8rgrav?=)
Cc:        Reko Turja <reko.turja@liukuma.net>, freebsd-hackers@freebsd.org
Subject:   Re: Aqcuiring full path to running process from outside the kernel
Message-ID:  <17643.4127.339206.625625@bhuda.mired.org>
In-Reply-To: <8664glnfhw.fsf@xps.des.no>
References:  <017601c6c486$6477c370$0a0aa8c0@rivendell> <17640.52899.432083.511555@bhuda.mired.org> <86sljqnzbz.fsf@xps.des.no> <17642.8303.746281.383448@bhuda.mired.org> <8664glnfhw.fsf@xps.des.no>

next in thread | previous in thread | raw e-mail | index | archive | help
In <8664glnfhw.fsf@xps.des.no>, Dag-Erling Sm=F8rgrav <des@des.no> type=
d:
> Mike Meyer <mwm@mired.org> writes:
> > In <86sljqnzbz.fsf@xps.des.no>, Dag-Erling Sm=F8rgrav <des@des.no> =
typed:
> > > You got it the wrong way around.  First pass argv[0] to realpath(=
3),
> > > fall back to using $PATH only if realpath(3) fails (which it shou=
ldn't
> > > unless you've called chdir(2), chroot(2) or jail(2) earlier in th=
e
> > > process, or the executable was moved or removed)
> > No, I got it the right way 'round. If the shell walks the PATH, the=
n
> > calling realpath(3) on argv[0] is the wrong thing to do, as it'll
> > resolve the path relative to the pwd.
>=20
> but argv[0] is either an absolute path or a path relative to pwd,
> unless your shell is broken.
>=20
> des@xps ~% cat >bin/foo
> #!/bin/sh
> echo $0 $@
> des@xps ~% chmod a+rx bin/foo
> des@xps ~% ./bin/foo
> ./bin/foo
> des@xps ~% foo
> /home/des/bin/foo

That's happening because sh does the path search on argv[0] (if it
would have done it when you executed the command) and uses the result
instead of argv[0] for $0. If you try it in C, it doesn't work:

bhuda% cat >foo.c
#include <stdio.h>

main(int argc, char **argv) {

  printf("%s\n", argv[0]) ;
}
bhuda% cc foo.c -o bin/foo
bhuda% ./bin/foo
./bin/foo
bhuda% foo
foo
bhuda%=20

Changing shells to /bin/sh or bin/csh doesn't change things.

=09<mike
--=20
Mike Meyer <mwm@mired.org>=09=09http://www.mired.org/consulting.html
Independent Network/Unix/Perforce consultant, email for more informatio=
n.



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