#!/bin/bash # Close TalkEdit and/or CutScript processes (Tauri dev, Electron, and Python backends) KILLED_ANY=0 kill_pids() { local label=$1 shift local pids=("$@") [[ ${#pids[@]} -eq 0 ]] && return echo "Stopping $label (PID(s): ${pids[*]})..." kill -TERM "${pids[@]}" 2>/dev/null || true sleep 0.7 local survivors=() local pid for pid in "${pids[@]}"; do if kill -0 "$pid" 2>/dev/null; then survivors+=("$pid") fi done if [[ ${#survivors[@]} -gt 0 ]]; then echo "Force killing stubborn $label PID(s): ${survivors[*]}" kill -KILL "${survivors[@]}" 2>/dev/null || true fi KILLED_ANY=1 } kill_tree() { local pid=$1 local children children=$(pgrep -P "$pid" 2>/dev/null || true) if [[ -n "$children" ]]; then local child for child in $children; do kill_tree "$child" done fi kill_pids "process tree" "$pid" } kill_port() { local port=$1 local name=$2 local pids pids=$(lsof -ti tcp:"$port" 2>/dev/null) if [[ -n "$pids" ]]; then # Kill any children first so watcher subprocesses do not survive. local pid for pid in $pids; do kill_tree "$pid" done kill_pids "$name listener on port $port" $pids fi } kill_pattern() { local pattern=$1 local label=$2 local pids pids=$(pgrep -f "$pattern" 2>/dev/null) if [[ -n "$pids" ]]; then kill_pids "$label" $pids fi } # --- TalkEdit (Tauri, port 8000) --- kill_port 8000 "TalkEdit" kill_port 5173 "TalkEdit frontend" kill_pattern "tauri.*TalkEdit\|TalkEdit.*tauri\|cargo.*tauri dev\|/TalkEdit/target/debug" "TalkEdit (Tauri dev)" # Vite dev server for TalkEdit (fallback when not bound to 5173 yet) kill_pattern "[/ ]vite([[:space:]]|$)\|[/ ]rsbuild([[:space:]]|$)" "TalkEdit frontend dev server" # --- CutScript (Electron, port 8642) --- kill_port 8642 "CutScript" kill_pattern "electron.*CutScript\|CutScript.*electron" "CutScript (Electron)" kill_pattern "vite.*CutScript\|CutScript.*vite" "CutScript frontend dev server" # --- Orphaned uvicorn workers for either app --- kill_pattern "uvicorn.*main:app.*--port 800[012]" "leftover uvicorn workers (TalkEdit)" kill_pattern "uvicorn.*main:app.*--port 864" "leftover uvicorn workers (CutScript)" if [[ $KILLED_ANY -eq 0 ]]; then echo "Nothing to close — no TalkEdit or CutScript processes found." else echo "Done." fi