Passing the -a flag multiple times make ps show no processes.
Details
Diff Detail
- Repository
- rS FreeBSD src repository - subversion
- Lint
Lint Skipped - Unit
Tests Skipped
Event Timeline
I thought about this more and I have a question. What should the result of ps -uxaa -U $(id -un) be? Should it only list my processes (-U) or all of them (-a)? I think we might need an additional change like this:
diff --git a/bin/ps/ps.c b/bin/ps/ps.c index f23b3c52735..f8dcd3cfa02 100644 --- a/bin/ps/ps.c +++ b/bin/ps/ps.c @@ -512,7 +512,9 @@ main(int argc, char *argv[]) */ what = showthreads != 0 ? KERN_PROC_ALL : KERN_PROC_PROC; flag = 0; - if (nselectors == 1) { + if (all) + nselectors = 0; + else if (nselectors == 1) { if (gidlist.count == 1) { what = KERN_PROC_RGID | showthreads; flag = *gidlist.l.gids;
Hard to say. It would make sense and IIUC it's what Linux does (though there are other incompatibilities there already and it treats options with an without dashes differently (its -a excludes session leaders for some reason, but the "BSD style" option without dash does not)).
But it would change the current behavior and other BSDs don't do it.
Currently -a just changes what ps does by default, it's not really a "selector" that does a union like the rest. And -x is a filter on top of that. That's useful if you want to alias "ps" (or something else) to "ps -ax" so that it just stops hiding processes by default and still use it with other selector arguments (that's how I noticed the problem with repeated -a because I kept using it out of habit).