From 50921294de97d64d4fb7005bf9a3369be9d3444e Mon Sep 17 00:00:00 2001 From: "sas.fajri" Date: Mon, 13 Apr 2026 20:43:44 +0700 Subject: [PATCH] Allow stop script to kill a port --- README.md | 12 ++++++++++++ stop.sh | 31 +++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/README.md b/README.md index e272ace..950853f 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,18 @@ Stop the background server with: ./stop.sh ``` +To stop a specific running port: + +```bash +./stop.sh 5201 +``` + +or: + +```bash +PORT=5201 ./stop.sh +``` + If you run the server in the foreground, stop it with `Ctrl+C`. ## Notes diff --git a/stop.sh b/stop.sh index 25d7404..9436475 100755 --- a/stop.sh +++ b/stop.sh @@ -3,6 +3,37 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PID_FILE="$ROOT_DIR/.doclink-web.pid" +PORT="${1:-${PORT:-}}" + +stop_by_pid() { + local pid="$1" + if [[ -z "${pid:-}" ]]; then + return 1 + fi + + if kill -0 "$pid" 2>/dev/null; then + kill "$pid" + echo "Stopped DocLink Web process $pid" + return 0 + fi + + echo "Process $pid is not running anymore." + return 0 +} + +if [[ -n "${PORT:-}" ]]; then + if command -v lsof >/dev/null 2>&1; then + PIDS="$(lsof -ti tcp:"$PORT" 2>/dev/null || true)" + if [[ -n "${PIDS:-}" ]]; then + for PID in $PIDS; do + stop_by_pid "$PID" + done + rm -f "$PID_FILE" + exit 0 + fi + fi + echo "No process found listening on port $PORT." +fi if [[ ! -f "$PID_FILE" ]]; then echo "No pid file found. If the server is running in another terminal, stop it with Ctrl+C."