/
githubmirror
/
procps
Обзор
Документация
Войти
/
githubmirror
/
procps
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
testsuite/pgrep.test/pgrep.exp
200 строк
6 KB
Craig Small
pgrep: Don't treat empty list as 0
29 май 2026, 10:38
29 май 2026, 10:38
bda5bc4
Код
Авторство
О чём код?
# # Dejagnu tests for pgrep - part of procps # set mypid [pid] set not_ppid [ expr { $mypid + 1 } ] set pgrep "${topdir}src/pgrep" set uid [ exec id -u ] set not_uid [ expr { $uid + 1 } ] set gid [ exec id -g ] set not_gid [ expr { $gid + 1 } ] set ps "${topdir}src/ps/pscommand" set tty [ get_tty ] set test "pgrep with no arguments" spawn $pgrep expect_pass "$test" "^\(lt-\)\?pgrep: no matching criteria specified\\s*" make_testproc set testproc_len [ string length $testproc_comm ] set testproc_trim [ string range $testproc_comm 0 [ expr { $testproc_len - 2 } ] ] set testproc1_sid [ string trim [ exec $ps --no-headers -o sid $testproc1_pid ] ] set not_testproc1_sid [ expr { $testproc1_sid + 1 } ] set test "pgrep find both test pids" spawn $pgrep $testproc_comm expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$" # In Debian only set test "pgrep counts 2 test pids" spawn $pgrep -c $testproc_comm expect_pass "$test" "^2\\s*" set test "pgrep with : delimiter" spawn $pgrep -d : $testproc_comm expect_pass "$test" "^${testproc1_pid}:${testproc2_pid}\\s*$" set test "pgrep match against full process name" spawn $pgrep -f "$testproc_path\\s+$testproc_arg_str" expect_pass "$test" "^$testproc1_pid\\s*$" set test "pgrep with matching gid" spawn $pgrep -G $gid $testproc_comm expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$" set test "pgrep with not matching gid" spawn $pgrep -G $not_gid $testproc_comm expect_blank $test set test "pgrep with process name" spawn $pgrep -l $testproc_comm expect_pass "$test" "^$testproc1_pid\\s+$testproc_comm\\s+$testproc2_pid\\s+$testproc_comm\\s*$" set test "pgrep with full command line" spawn $pgrep -af "$testproc_path$" expect_pass "$test" "^$testproc2_pid\\s+$testproc_path\\s*$" set test "pgrep find newest test pid" spawn $pgrep -n $testproc_comm expect_pass "$test" "^$testproc2_pid\\s*$" set test "pgrep find oldest test pid" spawn $pgrep -o $testproc_comm expect_pass "$test" "^$testproc1_pid\\s*$" set test "prep with matching pid" spawn $pgrep -p $testproc1_pid expect_pass "$test" "^$testproc1_pid\\s*$" set test "pgrep pid and pidfile opption conflict" spawn $pgrep -p 42 -F /dev/null expect_pass "$test" "^pgrep: Cannot use pidfile and pid option together" set test "pgrep matches with parent pid" spawn $pgrep -P $mypid $testproc_comm expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$" set test "pgrep doesn't match with bogus parent pid" spawn $pgrep -P $not_ppid $testproc_comm expect_blank "$test" set test "pgrep matches with its own sid" spawn $pgrep -s $testproc1_sid $testproc_comm expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$" set test "pgrep doesn't match with bogus sid" spawn $pgrep -s $not_testproc1_sid $testproc_comm expect_blank "$test" set test1 "pgrep matches on tty" set test2 "pgrep doesn't match on tty and wrong runstate" if { $tty == "" } { untested "$test1" untested "$test2" } else { spawn $pgrep -t $tty $testproc_comm 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" spawn $pgrep -t glass $testproc_comm expect_blank "$test" set test "pgrep with matching euid" spawn $pgrep -u $uid $testproc_comm expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$" set test "pgrep with not matching euid" spawn $pgrep -u $not_uid $testproc_comm expect_blank $test set test "pgrep with matching uid" spawn $pgrep -U $uid $testproc_comm expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$" set test "pgrep with not matching uid" spawn $pgrep -U $not_uid $testproc_comm expect_blank $test set test "pgrep with empty uid list" spawn $pgrep -U , expect_pass "$test" "pgrep: invalid empty list" expect_spawn_retval "$test" 2 set test "pgrep matches on substring" spawn $pgrep $testproc_trim expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$" set test "pgrep matches full string with exact" spawn $pgrep -x $testproc_comm expect_pass "$test" "^$testproc1_pid\\s+$testproc2_pid\\s*$" set test "pgrep does not match substring with exact" spawn $pgrep -x $testproc_trim expect_blank $test set test "pgrep with long non-matching pattern gives warning" spawn $pgrep gnome-session-bi expect_pass "$test" "pattern that searches for process name longer than 15 characters will result in zero matches" set test "pgrep quiet matching shows no output" spawn $pgrep --quiet $testproc_comm expect_blank "$test" expect_spawn_retval "$test" 0 set test "pgrep quiet not matching shows no output too" spawn $pgrep --quiet XXXXXXX$testproc_comm expect_blank "$test" expect_spawn_retval "$test" 1 # Cleanup kill_testproc set env_testproc_comm "pgrepenvreg" set env_exact_name "PGREP_ENV_MATCH" set env_prefix_name "${env_exact_name}_SUFFIX" set testproc_realpath "${topdir}/src/tests/test_process" set env_testproc1_pid [exec env -i ${env_exact_name}=one $testproc_realpath -c $env_testproc_comm &] set env_testproc2_pid [exec env -i ${env_prefix_name}=one $testproc_realpath -c $env_testproc_comm &] set test "pgrep --env name matches exact variable name only" spawn $pgrep --env $env_exact_name $env_testproc_comm expect_pass "$test" "^$env_testproc1_pid\\s*$" set test "pgrep --env name=value matches exact pair" spawn $pgrep --env ${env_exact_name}=one $env_testproc_comm expect_pass "$test" "^$env_testproc1_pid\\s*$" kill_process $env_testproc1_pid kill_process $env_testproc2_pid make_testproc "foo bar" set test "pgrep shell quote for process name with spaces" spawn $pgrep -Ql "foo bar" expect_pass "$test" "'foo bar'" kill_testproc make_testproc "foobar" set test "pgrep shell quote for process name without spaces" spawn $pgrep -Ql "foobar" expect_pass "$test" {[^']foobar} kill_testproc make_testproc "" set pidfile [exec mktemp] set fh [open $pidfile w] puts $fh $testproc1_pid close $fh set test "pgrep shell quote for zero-length process name" spawn $pgrep -QlF $pidfile expect_pass "$test" "''" file delete $pidfile kill_testproc