feat(aihr): complete phase two pilot readiness
This commit is contained in:
Executable
+79
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
source "$ROOT_DIR/scripts/lib/process-tree.sh"
|
||||
|
||||
sleep 60 &
|
||||
protected_pid="$!"
|
||||
signal_process_snapshot "${protected_pid}|not-the-real-start-time" KILL
|
||||
if ! kill -0 "$protected_pid" >/dev/null 2>&1; then
|
||||
echo "FAIL: identity mismatch killed an unrelated process" >&2
|
||||
exit 1
|
||||
fi
|
||||
kill "$protected_pid" >/dev/null 2>&1 || true
|
||||
wait "$protected_pid" 2>/dev/null || true
|
||||
|
||||
sh -c 'sleep 60 & wait' &
|
||||
parent_pid="$!"
|
||||
sleep 0.1
|
||||
child_pid="$(pgrep -P "$parent_pid" | head -n 1)"
|
||||
|
||||
if [[ -z "$child_pid" ]]; then
|
||||
echo "FAIL: dummy child process was not created" >&2
|
||||
stop_process_tree "$parent_pid" KILL
|
||||
exit 1
|
||||
fi
|
||||
|
||||
stop_process_tree "$parent_pid"
|
||||
wait "$parent_pid" 2>/dev/null || true
|
||||
sleep 0.1
|
||||
|
||||
child_state="$(ps -o stat= -p "$child_pid" 2>/dev/null | xargs || true)"
|
||||
if [[ -n "$child_state" && "$child_state" != Z* ]]; then
|
||||
echo "FAIL: child process $child_pid is still running ($child_state)" >&2
|
||||
stop_process_tree "$child_pid" KILL
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "PASS: process tree stopped"
|
||||
|
||||
PROCESS_TREE_TERM_WAIT_LOOPS=2
|
||||
export PROCESS_TREE_TERM_WAIT_LOOPS
|
||||
sh -c 'trap "" TERM; sh -c '\''trap "" TERM; sleep 60'\'' & wait' &
|
||||
stubborn_parent_pid="$!"
|
||||
sleep 0.1
|
||||
stubborn_child_pid="$(pgrep -P "$stubborn_parent_pid" | head -n 1)"
|
||||
|
||||
stop_process_tree "$stubborn_parent_pid"
|
||||
wait "$stubborn_parent_pid" 2>/dev/null || true
|
||||
sleep 0.1
|
||||
|
||||
stubborn_child_state="$(ps -o stat= -p "$stubborn_child_pid" 2>/dev/null | xargs || true)"
|
||||
if [[ -n "$stubborn_child_state" && "$stubborn_child_state" != Z* ]]; then
|
||||
echo "FAIL: TERM-resistant child process $stubborn_child_pid is still running ($stubborn_child_state)" >&2
|
||||
kill -KILL "$stubborn_child_pid" >/dev/null 2>&1 || true
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "PASS: TERM-resistant process tree escalated safely"
|
||||
|
||||
identity_marker="$(mktemp)"
|
||||
rm -f "$identity_marker"
|
||||
process_identity_token() {
|
||||
if [[ ! -f "$identity_marker" ]]; then
|
||||
touch "$identity_marker"
|
||||
echo "first identity"
|
||||
else
|
||||
echo "reused identity"
|
||||
fi
|
||||
}
|
||||
|
||||
reused_snapshot="$(snapshot_process_tree 999999)"
|
||||
rm -f "$identity_marker"
|
||||
if [[ -n "$reused_snapshot" ]]; then
|
||||
echo "FAIL: snapshot retained a process tree after root identity changed" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "PASS: root identity change invalidates the snapshot"
|
||||
Reference in New Issue
Block a user