blob: e5fb2fcaa095ef6fbed6af53b7a4d6a923a39d0f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#!/usr/bin/env bash
#
# Kill leftover CI test processes (zenserver, minio, nomad, consul) whose
# executable lives under the given build directory.
#
# Used by CI workflows to clean up any test processes from a previous run
# before starting a new one, and to reap any that are still running after
# the run finishes.
#
# Usage: kill-test-processes.sh <label> <build_dir>
# label: word printed in log messages, e.g. "stale" or "leftover"
# build_dir: absolute path; only processes whose executable is under this
# directory are killed.
#
# We resolve each PID's actual executable path rather than relying on argv
# (which `pgrep -a` reports). argv starts with the short process name (e.g.
# "consul") regardless of how the process was launched, so a pure argv prefix
# match never fires and leftovers silently survived between runs.
set -u
label=${1:?label required}
build_dir=${2:?build_dir required}
get_exe_path() {
local pid=$1
if [[ -r "/proc/$pid/exe" ]]; then
# Linux
readlink -f "/proc/$pid/exe" 2>/dev/null || true
else
# macOS fallback: the "txt" file descriptor points at the process binary
lsof -p "$pid" -Fn -a -d txt 2>/dev/null | awk '/^n/{print substr($0,2); exit}' || true
fi
}
for name in zenserver minio nomad consul; do
while read -r pid; do
[[ -z "$pid" ]] && continue
exe=$(get_exe_path "$pid")
if [[ "$exe" == "$build_dir"* ]]; then
echo "Killing $label $name (PID $pid): $exe"
kill -9 "$pid" 2>/dev/null || true
fi
done < <(pgrep -x "$name" 2>/dev/null || true)
done
|