From cacba5613ec3333e6536820a0453ae67026eafde Mon Sep 17 00:00:00 2001 From: Craig Small Date: Tue, 1 Jul 2014 18:51:21 +1000 Subject: [PATCH] Reliably kill test processes It seems command -v also includes built-ins so checking for kill is useless because it finds the built-in and those machines or environments that have no /bin/kill fail at the check stage. Oh and then TCL exec doesn't spawn a shell. After reading way too many TCL websites, I believe this should fix the problem. TCL quoting is... different to say the least but it works reliably here. The script now even picked up a typo elsewhere which was nice. This change should stop the intermittent FTBFS bugs from the Debian pbuilders, I hope! You'd think kill $var wouldn't be this difficult. --- testsuite/config/unix.exp | 15 +++++++++++++++ testsuite/pgrep.test/pgrep.exp | 10 +--------- testsuite/pkill.test/pkill.exp | 10 +--------- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/testsuite/config/unix.exp b/testsuite/config/unix.exp index 700c38ee..522efb15 100644 --- a/testsuite/config/unix.exp +++ b/testsuite/config/unix.exp @@ -7,6 +7,13 @@ set usage_help "\\s*-h, --help\\s+display this help and exit\\s+" set usage_version "\\s*-V, --version\\s+output version information and exit\\s+" set usage_man "\\s*For more details see \\S+\\." +proc kill_process pid { + set cmdline "kill $pid" + if { [catch { exec /bin/sh -c $cmdline } msg]} { + warning "Could not kill process: $msg\n" + } +} + proc procps_v_version { tool } { global topdir set toolpath ${topdir}${tool} @@ -131,3 +138,11 @@ proc make_testproc { } { set testproc1_pid [ exec $testproc_path $sleep_time & ] set testproc2_pid [ exec $testproc_path $sleep_time & ] } + +proc kill_testproc { } { + global testproc_path testproc1_pid testproc2_pid + + kill_process $testproc1_pid + kill_process $testproc2_pid + file delete $testproc_path +} diff --git a/testsuite/pgrep.test/pgrep.exp b/testsuite/pgrep.test/pgrep.exp index 248c45fb..152b6ecc 100644 --- a/testsuite/pgrep.test/pgrep.exp +++ b/testsuite/pgrep.test/pgrep.exp @@ -16,12 +16,6 @@ set test "pgprep with no arguments" spawn $pgrep expect_pass "$test" "^\(lt-\)\?pgrep: no matching criteria specified\\s*" -# Tests that don't need the test process go above here -if { [ catch { exec sh -c "command -v kill" } kill_path] } { - untested { kill path not found } - return -} - make_testproc set testproc_len [ string length $testproc_comm ] @@ -123,6 +117,4 @@ expect_blank $test # Cleanup -eval exec "$kill_path $testproc1_pid" -eval exec "$kill_path $testproc2_pid" -file delete $testproc_path +kill_testproc diff --git a/testsuite/pkill.test/pkill.exp b/testsuite/pkill.test/pkill.exp index 2c9f91e6..5eece7de 100644 --- a/testsuite/pkill.test/pkill.exp +++ b/testsuite/pkill.test/pkill.exp @@ -16,12 +16,6 @@ set test "pkill with no arguments" spawn $pkill expect_pass "$test" "^\(lt-\)\?pkill: no matching criteria specified\\s*" -# Tests that don't need the test process go above here -if { [ catch { exec sh -c "command -v kill" } kill_path] } { - untested { kill path not found } - return -} - make_testproc set testproc_len [ string length $testproc_comm ] set testproc_trim [ string range $testproc_comm 0 [ expr { $testproc_len - 2 } ] ] @@ -132,6 +126,4 @@ untested "$test" # Cleanup -eval exec "$kill_path $testproc1_pid" -eval exec "$kill_path $testproc2_pid" -exec rm $testproc_path +kill_testproc