diff --git a/common/config b/common/config
index 41b8f29d1..6f531c43d 100644
--- a/common/config
+++ b/common/config
@@ -182,7 +182,6 @@ export CHACL_PROG="$(type -P chacl)"
 export ATTR_PROG="$(type -P attr)"
 export QUOTA_PROG="$(type -P quota)"
 export XFS_QUOTA_PROG="$(type -P xfs_quota)"
-export KILLALL_PROG="$(type -P killall)"
 export INDENT_PROG="$(type -P indent)"
 export XFS_COPY_PROG="$(type -P xfs_copy)"
 export FSTRIM_PROG="$(type -P fstrim)"
diff --git a/common/fuzzy b/common/fuzzy
index 3a7f04aae..534e91ded 100644
--- a/common/fuzzy
+++ b/common/fuzzy
@@ -1188,14 +1188,14 @@ _scratch_xfs_stress_scrub_cleanup() {
 	# a race condition that can hang fstests.
 	#
 	# If the xfs_io -c freeze process is asleep waiting for a write lock on
-	# s_umount or sb_write when the killall signal is delivered, it will
+	# s_umount or sb_write when the kill signal is delivered, it will
 	# not check for pending signals until after it has frozen the fs.  If
 	# even one thread of the stress test processes (xfs_io, fsstress, etc.)
-	# is waiting for read locks on sb_write when the killall signals are
+	# is waiting for read locks on sb_write when the kill signals are
 	# delivered, they will block in the kernel until someone thaws the fs,
 	# and the `wait' below will wait forever.
 	#
-	# Hence we issue the killall, wait for the freezer loop to exit, thaw
+	# Hence we issue the kill, wait for the freezer loop to exit, thaw
 	# the filesystem, and wait for the rest of the children.
 	if [ -n "$__SCRUB_STRESS_FREEZE_PID" ]; then
 		echo "Waiting for fs freezer $__SCRUB_STRESS_FREEZE_PID to exit at $(date)" >> $seqres.full
diff --git a/doc/requirement-checking.txt b/doc/requirement-checking.txt
index 802bf2a3f..78990fe9e 100644
--- a/doc/requirement-checking.txt
+++ b/doc/requirement-checking.txt
@@ -40,11 +40,11 @@ _require_command "$NAME_PROG" name
      should then be used to refer to the command when executing it.  For
      example:
 
-	_require_command "KILLALL_PROG" killall
+	_require_command "$XFS_DB_PROG" "xfs_db"
 
-     to locate the killall command and then:
+     to locate the xfs_db command and then:
 
-	$KILLALL_PROG -q $FSSTRESS_PROG
+	$XFS_DB_PROG -c "sb 0" -c "print" $SCRATCH_DEV
 
      to make use of it.
 
diff --git a/tests/btrfs/192 b/tests/btrfs/192
index cc8e1e003..0a8ab2c1b 100755
--- a/tests/btrfs/192
+++ b/tests/btrfs/192
@@ -27,7 +27,6 @@ _cleanup()
 . ./common/dmlogwrites
 
 
-_require_command "$KILLALL_PROG" killall
 _require_command "$BLKDISCARD_PROG" blkdiscard
 _require_btrfs_fs_feature "no_holes"
 _require_btrfs_mkfs_feature "no-holes"
diff --git a/tests/btrfs/212 b/tests/btrfs/212
index 745b9598a..80c702720 100755
--- a/tests/btrfs/212
+++ b/tests/btrfs/212
@@ -25,8 +25,6 @@ _cleanup()
 . ./common/filter
 
 _require_scratch
-_require_command "$KILLALL_PROG" killall
-
 _scratch_mkfs >> $seqres.full
 _scratch_mount
 
diff --git a/tests/generic/270 b/tests/generic/270
index aff379ac5..342ac8b5d 100755
--- a/tests/generic/270
+++ b/tests/generic/270
@@ -56,7 +56,6 @@ _workout()
 _require_quota
 _require_user
 _require_scratch
-_require_command "$KILLALL_PROG" killall
 _require_command "$SETCAP_PROG" setcap
 _require_attrs security
 
diff --git a/tests/generic/310 b/tests/generic/310
index 15e87aece..1ae9e0233 100755
--- a/tests/generic/310
+++ b/tests/generic/310
@@ -29,14 +29,19 @@ _begin_fstest auto
 # Override the default cleanup function.
 _cleanup()
 {
+	if [ -n "$readdir_pid" ]; then
+		pkill --parent "$readdir_pid" t_readdir > /dev/null 2>&1
+		kill -9 $readdir_pid > /dev/null 2>&1
+		wait
+	fi
 	rm -rf $TEST_DIR/tmp
+	rm -f $tmp.*
 }
 
 # Import common functions.
 . ./common/filter
 
 _require_test
-_require_command "$KILLALL_PROG" killall
 
 dmesg -c > /dev/null
 
@@ -80,9 +85,12 @@ done
 
 _test_read()
 {
-	$here/src/t_readdir_1 $SEQ_DIR &
+	$here/src/t_readdir_1 $SEQ_DIR > /dev/null 2>&1 &
+	readdir_pid=$!
 	sleep $RUN_TIME
-	$KILLALL_PROG t_readdir_1
+	kill $readdir_pid
+	unset readdir_pid
+	wait
 	check_kernel_bug
 	if [ $? -ne 0 ]; then
 		_fatal "kernel bug detected, check dmesg for more infomation."
@@ -91,9 +99,13 @@ _test_read()
 
 _test_lseek()
 {
-	$here/src/t_readdir_2 $SEQ_DIR &
+	$here/src/t_readdir_2 $SEQ_DIR > /dev/null 2>&1 &
+	readdir_pid=$!
 	sleep $RUN_TIME
-	$KILLALL_PROG t_readdir_2
+	kill $readdir_pid
+	unset readdir_pid
+	wait
+
 	check_kernel_bug
 	if [ $? -ne 0 ]; then
 		_fatal "kernel bug detected, check dmesg for more infomation."
diff --git a/tests/generic/751 b/tests/generic/751
index eac2d230a..892e59edf 100755
--- a/tests/generic/751
+++ b/tests/generic/751
@@ -80,7 +80,6 @@ fio_err=$tmp.fio.err
 _require_test
 _require_scratch
 _require_split_huge_pages_knob
-_require_command "$KILLALL_PROG" "killall"
 _fixed_by_git_commit kernel 2a0774c2886d \
 	"XArray: set the marks correctly when splitting an entry"
 
diff --git a/tests/overlay/058 b/tests/overlay/058
index b70e06638..b19a47e36 100755
--- a/tests/overlay/058
+++ b/tests/overlay/058
@@ -21,8 +21,10 @@ _begin_fstest auto quick exportfs
 # Override the default cleanup function.
 _cleanup()
 {
-	$KILLALL_PROG -9 open_by_handle >/dev/null 2>&1
-	wait
+	if [ -n "$pids" ]; then
+		kill -9 $pids >/dev/null 2>&1
+		wait
+	fi
 	cd /
 	rm -f $tmp.*
 }
@@ -36,7 +38,6 @@ _require_test_program "open_by_handle"
 # We need to require all features together, because nfs_export cannot
 # be enabled when index is disabled
 _require_scratch_overlay_features index nfs_export
-_require_command "$KILLALL_PROG" killall
 
 # All overlay dirs are on scratch partition
 lower=$OVL_BASE_SCRATCH_MNT/$OVL_LOWER
@@ -89,9 +90,11 @@ test_file_handles $SCRATCH_MNT -rnp -i $tmp.lower_file_handles
 # overlay dentries in cache
 _scratch_cycle_mount "index=on,nfs_export=on"
 test_file_handles $SCRATCH_MNT -rnps -i $tmp.upper_file_handles &
+pids=$!
 # Give the above 1 second to get to sleep loop
 sleep 1
 test_file_handles $SCRATCH_MNT -rnps -i $tmp.lower_file_handles &
+pids="$pids $!"
 # Give the above 1 second to get to sleep loop
 sleep 1
 
@@ -105,8 +108,9 @@ test_file_handles $SCRATCH_MNT -rnp -i $tmp.upper_file_handles
 test_file_handles $SCRATCH_MNT -rnp -i $tmp.lower_file_handles
 
 # SIGPIPE avoids Terminated/Killed message from bash
-$KILLALL_PROG -q -13 open_by_handle
+kill -13 $pids > /dev/null 2>&1
 wait
+unset pids
 
 status=0
 exit
diff --git a/tests/xfs/011 b/tests/xfs/011
index ed69879c5..1192e75dd 100755
--- a/tests/xfs/011
+++ b/tests/xfs/011
@@ -14,7 +14,6 @@ _begin_fstest auto freeze log metadata quick
 _require_scratch
 _require_freeze
 _require_xfs_sysfs $(_short_dev $TEST_DEV)/log
-_require_command "$KILLALL_PROG" killall
 
 . ./common/filter
 
diff --git a/tests/xfs/013 b/tests/xfs/013
index c68c6ad85..fd3d8c64c 100755
--- a/tests/xfs/013
+++ b/tests/xfs/013
@@ -74,7 +74,6 @@ _cleaner()
 _require_scratch
 _require_xfs_mkfs_finobt
 _require_xfs_finobt
-_require_command "$KILLALL_PROG" killall
 
 _scratch_mkfs_xfs "-m crc=1,finobt=1 -d agcount=2" | \
 	_filter_mkfs 2>> $seqres.full
diff --git a/tests/xfs/051 b/tests/xfs/051
index bb9c36da8..fe3d75cab 100755
--- a/tests/xfs/051
+++ b/tests/xfs/051
@@ -19,7 +19,6 @@ _begin_fstest shutdown auto log metadata
 _require_scratch
 _require_dm_target flakey
 _require_xfs_sysfs debug/log_recovery_delay
-_require_command "$KILLALL_PROG" killall
 
 echo "Silence is golden."
 
diff --git a/tests/xfs/057 b/tests/xfs/057
index 62eb8b93c..da583e621 100755
--- a/tests/xfs/057
+++ b/tests/xfs/057
@@ -42,7 +42,6 @@ _cleanup()
 _require_xfs_io_error_injection log_item_pin
 _require_xfs_io_error_injection log_bad_crc
 _require_scratch
-_require_command "$KILLALL_PROG" killall
 
 echo "Silence is golden."
 
diff --git a/tests/xfs/070 b/tests/xfs/070
index d2bd7e2c4..143f56888 100755
--- a/tests/xfs/070
+++ b/tests/xfs/070
@@ -24,10 +24,10 @@ _begin_fstest auto quick repair
 # Override the default cleanup function.
 _cleanup()
 {
+	[ -n "$repair_pid" ] && kill -9 $repair_pid > /dev/null 2>&1
+	wait > /dev/null 2>&1
 	cd /
 	rm -f $tmp.*
-	$KILLALL_PROG -9 $XFS_REPAIR_PROG > /dev/null 2>&1
-	wait > /dev/null 2>&1
 }
 
 # Start and monitor an xfs_repair of the scratch device. This test can induce a
@@ -45,7 +45,8 @@ _xfs_repair_noscan()
 	repair_pid=$!
 
 	# monitor progress for as long as it is running
-	while [ `pgrep xfs_repair` ]; do
+	running=`pgrep xfs_repair`
+	while [ -n "$running" ]; do
 		grep "couldn't verify primary superblock" $tmp.repair \
 			> /dev/null 2>&1
 		if [ $? == 0 ]; then
@@ -58,6 +59,7 @@ _xfs_repair_noscan()
 		fi
 
 		sleep 1
+		running=`pgrep xfs_repair`
 	done
 
 	wait
@@ -72,7 +74,6 @@ _xfs_repair_noscan()
 
 # Modify as appropriate.
 _require_scratch_nocheck
-_require_command "$KILLALL_PROG" killall
 
 _scratch_mkfs | _filter_mkfs > /dev/null 2> $tmp.mkfs
 
diff --git a/tests/xfs/079 b/tests/xfs/079
index 794d2db49..4a1999bb8 100755
--- a/tests/xfs/079
+++ b/tests/xfs/079
@@ -23,7 +23,6 @@ _begin_fstest shutdown auto log quick
 # Modify as appropriate.
 _require_scratch
 _require_v2log
-_require_command "$KILLALL_PROG" killall
 
 echo "Silence is golden."
 
diff --git a/tests/xfs/141 b/tests/xfs/141
index b630ba10d..6aa844825 100755
--- a/tests/xfs/141
+++ b/tests/xfs/141
@@ -20,7 +20,6 @@ _begin_fstest auto log metadata
 # Modify as appropriate.
 _require_xfs_io_error_injection "log_bad_crc"
 _require_scratch
-_require_command "$KILLALL_PROG" killall
 
 echo "Silence is golden."
 
diff --git a/tests/xfs/167 b/tests/xfs/167
index 5ef2aa2ea..2a6e6b8d0 100755
--- a/tests/xfs/167
+++ b/tests/xfs/167
@@ -21,10 +21,7 @@ workout()
 # Import common functions.
 . ./common/filter
 
-
-_require_command "$KILLALL_PROG" killall
 _require_xfs_io_command "falloc"
-
 _require_scratch
 _scratch_mkfs_xfs >/dev/null 2>&1
 _scratch_mount
diff --git a/tests/xfs/297 b/tests/xfs/297
index 66c5d0cc7..f9cd2ff12 100755
--- a/tests/xfs/297
+++ b/tests/xfs/297
@@ -24,10 +24,8 @@ _cleanup()
 # Import common functions.
 . ./common/filter
 
-
 _require_scratch
 _require_freeze
-_require_command "$KILLALL_PROG" killall
 
 logblks=$(_scratch_find_xfs_min_logblocks -d agcount=16,su=256k,sw=12 -l su=256k)
 _scratch_mkfs_xfs -d agcount=16,su=256k,sw=12 -l su=256k,size=${logblks}b >/dev/null 2>&1
diff --git a/tests/xfs/442 b/tests/xfs/442
index d539fa5e0..08f0aac40 100755
--- a/tests/xfs/442
+++ b/tests/xfs/442
@@ -21,7 +21,6 @@ _begin_fstest auto stress clone quota
 
 _require_scratch_reflink
 _require_quota
-_require_command "$KILLALL_PROG" "killall"
 
 report_quota_blocks() {
 	$XFS_QUOTA_PROG -x -c "report $1" $SCRATCH_MNT | \
