diff options
author | csjp <csjp@FreeBSD.org> | 2004-11-14 19:30:02 +0000 |
---|---|---|
committer | csjp <csjp@FreeBSD.org> | 2004-11-14 19:30:02 +0000 |
commit | 27bff94fe5462b95315e20dd0b2a7c8d6da8677f (patch) | |
tree | 39318b6578337c6d25e119430005ba4d654d75a2 /bin/ps/ps.c | |
parent | 89e05e38ca35e42f70b77dc81498521299be3610 (diff) | |
download | FreeBSD-src-27bff94fe5462b95315e20dd0b2a7c8d6da8677f.zip FreeBSD-src-27bff94fe5462b95315e20dd0b2a7c8d6da8677f.tar.gz |
Currently if the user specifies -e and procfs is not mounted on /proc,
printing of the process environment will fail silently.
-define a function which will check to see if procfs is mounted on /proc
-Implement this test if the user specified -e
-If procfs is not mounted on /proc and -e was specified, print a warning.
informing the user that procfs(5) is required.
Reviewed by: wes, rwatson
Diffstat (limited to 'bin/ps/ps.c')
-rw-r--r-- | bin/ps/ps.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/bin/ps/ps.c b/bin/ps/ps.c index dcb7018..6455ea6 100644 --- a/bin/ps/ps.c +++ b/bin/ps/ps.c @@ -55,6 +55,7 @@ __FBSDID("$FreeBSD$"); #include <sys/stat.h> #include <sys/ioctl.h> #include <sys/sysctl.h> +#include <sys/mount.h> #include <ctype.h> #include <err.h> @@ -128,6 +129,7 @@ struct listinfo { } l; }; +static int check_procfs(void); static int addelem_gid(struct listinfo *, const char *); static int addelem_pid(struct listinfo *, const char *); static int addelem_tty(struct listinfo *, const char *); @@ -402,6 +404,14 @@ main(int argc, char *argv[]) argv += optind; /* + * If the user specified ps -e then they want a copy of the process + * environment kvm_getenvv(3) attempts to open /proc/<pid>/mem. + * Check to make sure that procfs is mounted on /proc, otherwise + * print a warning informing the user that output will be incomplete. + */ + if (needenv == 1 && check_procfs() == 0) + warnx("Process environment requires procfs(5)"); + /* * If there arguments after processing all the options, attempt * to treat them as a list of process ids. */ @@ -1166,6 +1176,21 @@ kludge_oldps_options(const char *optlist, char *origval, const char *nextarg) return (newopts); } +static int +check_procfs(void) +{ + struct statfs *mntbuf; + size_t mntsize, i; + + mntsize = getmntinfo(&mntbuf, MNT_NOWAIT); + for (i = 0; i < mntsize; i++) + if (strcmp(mntbuf[i].f_mntonname, "/proc") == 0 && + strcmp(mntbuf[i].f_fstypename, "procfs") == 0) { + return (1); + } + return (0); +} + static void usage(void) { |