pgrep: make --terminal respect other criteria
In some cases the --terminal option to pgrep will cause all processes matching the terminal to be output, even if other criteria would exclude them. Specifically, I noticed that it overrides the --runstates option. Signed-off-by: Craig Small <csmall@dropbear.xyz>
This commit is contained in:
parent
356730edbb
commit
848be2b1e2
1
NEWS
1
NEWS
@ -2,6 +2,7 @@ procps-ng-NEXT
|
|||||||
---------------
|
---------------
|
||||||
* docs: Don't install English manpages twice
|
* docs: Don't install English manpages twice
|
||||||
* pgrep: Add -H match on userspace signal handler merge #165
|
* pgrep: Add -H match on userspace signal handler merge #165
|
||||||
|
* pgrep: make --terminal respect other criteria
|
||||||
* ps: c flag shows command name again Debian #1026326
|
* ps: c flag shows command name again Debian #1026326
|
||||||
* ps.1: Match drs description from top.1 merge #156
|
* ps.1: Match drs description from top.1 merge #156
|
||||||
* skill: Match on -p again Debian #1025915
|
* skill: Match on -p again Debian #1025915
|
||||||
|
@ -706,8 +706,8 @@ static struct el * select_procs (int *num)
|
|||||||
match = 0;
|
match = 0;
|
||||||
else if (opt_older && (int)PIDS_GETFLT(ELAPSED) < opt_older)
|
else if (opt_older && (int)PIDS_GETFLT(ELAPSED) < opt_older)
|
||||||
match = 0;
|
match = 0;
|
||||||
else if (opt_term)
|
else if (opt_term && ! match_strlist(PIDS_GETSTR(TTYNAME), opt_term))
|
||||||
match = match_strlist(PIDS_GETSTR(TTYNAME), opt_term);
|
match = 0;
|
||||||
else if (opt_runstates && ! strchr(opt_runstates, PIDS_GETSCH(STA)))
|
else if (opt_runstates && ! strchr(opt_runstates, PIDS_GETSCH(STA)))
|
||||||
match = 0;
|
match = 0;
|
||||||
else if (opt_cgroup && ! match_cgroup_list (PIDS_GETSTV(CGROUP), opt_cgroup))
|
else if (opt_cgroup && ! match_cgroup_list (PIDS_GETSTV(CGROUP), opt_cgroup))
|
||||||
|
@ -5,9 +5,9 @@ set mypid [pid]
|
|||||||
set not_ppid [ expr { $mypid + 1 } ]
|
set not_ppid [ expr { $mypid + 1 } ]
|
||||||
set pgrep "${topdir}src/pgrep"
|
set pgrep "${topdir}src/pgrep"
|
||||||
set uid [ exec id -u ]
|
set uid [ exec id -u ]
|
||||||
set not_uid [ expr { $uid + 1 } ]
|
set not_uid [ expr { $uid + 1 } ]
|
||||||
set gid [ exec id -g ]
|
set gid [ exec id -g ]
|
||||||
set not_gid [ expr { $gid + 1 } ]
|
set not_gid [ expr { $gid + 1 } ]
|
||||||
set ps "${topdir}src/ps/pscommand"
|
set ps "${topdir}src/ps/pscommand"
|
||||||
set tty [ get_tty ]
|
set tty [ get_tty ]
|
||||||
|
|
||||||
@ -79,12 +79,16 @@ set test "pgrep doesn't match with bogus sid"
|
|||||||
spawn $pgrep -s $not_testproc1_sid $testproc_comm
|
spawn $pgrep -s $not_testproc1_sid $testproc_comm
|
||||||
expect_blank "$test"
|
expect_blank "$test"
|
||||||
|
|
||||||
set test "pgrep matches on tty"
|
set test1 "pgrep matches on tty"
|
||||||
|
set test2 "pgrep doesn't match on tty and wrong runstate"
|
||||||
if { $tty == "" } {
|
if { $tty == "" } {
|
||||||
untested "$test"
|
untested "$test1"
|
||||||
|
untested "$test2"
|
||||||
} else {
|
} else {
|
||||||
spawn $pgrep -t $tty $testproc_comm
|
spawn $pgrep -t $tty $testproc_comm
|
||||||
expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$"
|
expect_pass "$test1" "^$testproc1_pid\\s+$testproc2_pid\\s*$"
|
||||||
|
spawn $pgrep -t $tty -r D $testproc_comm
|
||||||
|
expect_blank "$test2"
|
||||||
}
|
}
|
||||||
|
|
||||||
set test "pgrep doesn't match with bogus tty"
|
set test "pgrep doesn't match with bogus tty"
|
||||||
|
Loading…
Reference in New Issue
Block a user