provide -U to alter that default.
git-svn-id: svn://svn.tartarus.org/sgt/utils@9715
cda61777-01e9-0310-a592-
d414129be87e
-\c pid [ -a ] command [ arg... ]
-\e bbbb bb iiiiiii iii
+\c pid [ options ] command [ arg... ]
+\e bbbb iiiiiii iiiiiii iii
\cq{MULTIPLE} if there is more than one. This also disables the
behaviour of filtering out apparent forks of the same script.
\cq{MULTIPLE} if there is more than one. This also disables the
behaviour of filtering out apparent forks of the same script.
+\dt \cw{-U}
+
+\dd Report pids belonging to any user. By default, \cw{pid} will only
+report processes owned by the same user as the one running it (except
+when root, when it defaults to reporting everybody's).
+
\U BUGS
\cw{pid} is currently completely specific to the Linux kernel, since
\U BUGS
\cw{pid} is currently completely specific to the Linux kernel, since
+static struct pidset filter_by_uid(struct pidset in, int uid)
+{
+ /*
+ * Return only those processes with a given uid.
+ */
+ struct pidset ret;
+ int pid;
+
+ pidset_init(&ret);
+ for (pid = pidset_first(&in); pid >= 0; pid = pidset_next(&in)) {
+ const struct procdata *proc = get_proc(pid);
+ if (proc->uid == uid)
+ pidset_add(&ret, pid);
+ }
+ return ret;
+}
+
static struct pidset filter_by_command(struct pidset in, const char **words)
{
/*
static struct pidset filter_by_command(struct pidset in, const char **words)
{
/*
const char usagemsg[] =
"usage: pid [options] <search-cmd> [<search-arg>...]\n"
"where: -a report all matching pids, not just one\n"
const char usagemsg[] =
"usage: pid [options] <search-cmd> [<search-arg>...]\n"
"where: -a report all matching pids, not just one\n"
+ " -U report pids of any user, not just ours\n"
" also: pid --version report version number\n"
" pid --help display this help text\n"
" pid --licence display the (MIT) licence text\n"
" also: pid --version report version number\n"
" pid --help display this help text\n"
" pid --licence display the (MIT) licence text\n"
{
const char **searchwords;
int nsearchwords;
{
const char **searchwords;
int nsearchwords;
+ int all = 0, all_uids = 0;
if (doing_opts && *p == '-') {
if (!strcmp(p, "-a") || !strcmp(p, "--all")) {
all = 1;
if (doing_opts && *p == '-') {
if (!strcmp(p, "-a") || !strcmp(p, "--all")) {
all = 1;
+ } else if (!strcmp(p, "-U") || !strcmp(p, "--all-uids")) {
+ all_uids = 1;
} else if (!strcmp(p, "--version")) {
version();
return 0;
} else if (!strcmp(p, "--version")) {
version();
return 0;
/*
* Construct our list of processes.
*/
procs = get_processes();
/*
* Construct our list of processes.
*/
procs = get_processes();
+ uid = getuid();
+ if (uid > 0 && !all_uids)
+ procs = filter_by_uid(procs, uid);
procs = filter_out_self(procs);
procs = filter_by_command(procs, searchwords);
if (!all)
procs = filter_out_self(procs);
procs = filter_by_command(procs, searchwords);
if (!all)