diff options
-rwxr-xr-x | tests/pgrep.test | 4 | ||||
-rwxr-xr-x | tests/pkill.test | 10 | ||||
-rw-r--r-- | toys/posix/ps.c | 8 |
3 files changed, 19 insertions, 3 deletions
diff --git a/tests/pgrep.test b/tests/pgrep.test index 753a55ab..3319c79a 100755 --- a/tests/pgrep.test +++ b/tests/pgrep.test @@ -29,5 +29,9 @@ testing "-o pattern" "pgrep -o yes" "$proc\n" "" "" testing "-s" "pgrep -s $session_id yes" "$proc\n" "" "" testing "-P" "pgrep -P $proc_parent yes" "$proc\n" "" "" +testing "return success" "pgrep yes && echo success" "$proc\nsuccess\n" "" "" +testing "return failure" "pgrep almost-certainly-not || echo failure" \ + "failure\n" "" "" + #Clean-up killall yes >/dev/null 2>&1 diff --git a/tests/pkill.test b/tests/pkill.test index 0bea32ab..3f20d260 100755 --- a/tests/pkill.test +++ b/tests/pkill.test @@ -92,10 +92,16 @@ testing "-P parent_prodId pattern" "pkill -P $proc_p yes && sleep 1 && killall yes >/dev/null 2>&1 yes >/dev/null & -proc=$! -proc_parent=`cat /proc/${proc}/stat | awk '{ print $4 }'` sleep 1 testing "-9 pattern" "pkill -9 yes && sleep 1 && (pgrep yes || echo 'yes')" "yes\n" "" "" killall yes >/dev/null 2>&1 +yes >/dev/null & +sleep 1 +testing "return success" "pkill yes && echo success" "success\n" "" "" +killall yes >/dev/null 2>&1 + +testing "return failure" "pkill almost-certainly-not || echo failure" \ + "failure\n" "" "" + diff --git a/toys/posix/ps.c b/toys/posix/ps.c index 82a84438..def81c55 100644 --- a/toys/posix/ps.c +++ b/toys/posix/ps.c @@ -1685,7 +1685,10 @@ static void match_pgrep(struct carveup *tb) if ((toys.optflags&FLAG_v) ? !!reg : !reg) return; } - // Repurpose a field for -c count + // pgrep should return success if there's a match. + toys.exitval = 0; + + // Repurpose a field for -c count. TT.sortpos++; if (toys.optflags&(FLAG_n|FLAG_o)) { long long ll = tb->slot[SLOT_starttime]; @@ -1738,6 +1741,9 @@ void pgrep_main(void) TT.match_process = pgrep_match_process; TT.show_process = (void *)match_pgrep; + // pgrep should return failure if there are no matches. + toys.exitval = 1; + dirtree_read("/proc", get_ps); if (toys.optflags&FLAG_c) printf("%d\n", TT.sortpos); if (TT.pgrep.snapshot) { |