#!/usr/bin/env bash # Restart a daemon idempotently — safe to call from i3's exec_always. # usage: restart-daemon [args…] set -uo pipefail name="${1:?usage: restart-daemon [args...]}" shift || true command -v "$name" >/dev/null 2>&1 || { echo "restart-daemon: $name not installed" >&2; exit 0; } pkill -x "$name" >/dev/null 2>&1 || true for _ in {1..20}; do pgrep -x "$name" >/dev/null || break sleep 0.1 done pgrep -x "$name" >/dev/null && pkill -9 -x "$name" log="${XDG_CACHE_HOME:-$HOME/.cache}/$name.log" mkdir -p "$(dirname "$log")" exec "$name" "$@" >>"$log" 2>&1 &