#!/usr/bin/env bash # DHARMA network — stop all running soul Engrams. # Reads PIDs from /tmp/dharma-pids written by launch_dharma.sh. # Falls back to killing by port if PID file is missing. # # Usage: # ./stop_dharma.sh stop all soul Engrams # ./stop_dharma.sh stop a single soul by slug set -euo pipefail PID_FILE=/tmp/dharma-pids FILTER="${1:-}" stopped=0 missed=0 # Kill via PID file if it exists if [ -f "$PID_FILE" ]; then while IFS=' ' read -r pid slug port; do [ -z "$pid" ] && continue if [ -n "$FILTER" ] && [ "$slug" != "$FILTER" ]; then continue fi if kill -0 "$pid" 2>/dev/null; then kill "$pid" echo "[dharma] stopped $slug (pid=$pid port=$port)" stopped=$((stopped + 1)) else echo "[dharma] $slug (pid=$pid) already gone" fi done < "$PID_FILE" if [ -z "$FILTER" ]; then rm -f "$PID_FILE" fi else echo "[dharma] no PID file at $PID_FILE — killing by port scan" # Fall back: kill anything on ports 8801–8819 for port in $(seq 8801 8819); do pids=$(lsof -ti tcp:"$port" 2>/dev/null || true) if [ -n "$pids" ]; then echo "[dharma] killing port $port (pids: $pids)" echo "$pids" | xargs kill 2>/dev/null || true stopped=$((stopped + 1)) fi done fi echo "" echo "[dharma] stopped=$stopped missed=$missed"