From 05b130b5a8b0ea3f8a54b13c3a000b036ec66a15 Mon Sep 17 00:00:00 2001 From: MT-Fire <798521692@qq.com> Date: Tue, 10 Mar 2026 12:52:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=81=9C=E6=AD=A2?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- stop.sh | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100755 stop.sh diff --git a/stop.sh b/stop.sh new file mode 100755 index 0000000..6418c5a --- /dev/null +++ b/stop.sh @@ -0,0 +1,111 @@ +#!/bin/bash + +# Paper Burner X - 停止脚本 + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)" +BACKEND_PORT=3456 +FRONTEND_PORT=8080 +PID_DIR="$PROJECT_DIR/.pids" + +echo -e "${BLUE}" +echo "======================================" +echo " Paper Burner X - 停止脚本" +echo "======================================" +echo -e "${NC}" + +# 函数:根据端口查找并杀死进程 +kill_port() { + local port=$1 + local pids=$(lsof -t -i:$port 2>/dev/null) + if [ -n "$pids" ]; then + echo -e "${YELLOW}→ 终止端口 $port 上的进程...${NC}" + for pid in $pids; do + kill -15 $pid 2>/dev/null + if kill -0 $pid 2>/dev/null; then + sleep 1 + kill -9 $pid 2>/dev/null + fi + echo -e " ${GREEN}已终止进程 $pid${NC}" + done + return 0 + else + return 1 + fi +} + +# 函数:根据 PID 文件杀死进程 +kill_pid_file() { + local pid_file=$1 + local service_name=$2 + if [ -f "$pid_file" ]; then + local pid=$(cat "$pid_file") + if [ -n "$pid" ] && kill -0 $pid 2>/dev/null; then + echo -e "${YELLOW}→ 终止 $service_name (PID: $pid)...${NC}" + kill -15 $pid 2>/dev/null + # 等待进程退出 + local count=0 + while kill -0 $pid 2>/dev/null && [ $count -lt 5 ]; do + sleep 0.5 + count=$((count + 1)) + done + # 如果进程还在,强制终止 + if kill -0 $pid 2>/dev/null; then + kill -9 $pid 2>/dev/null + fi + echo -e " ${GREEN}已终止${NC}" + fi + rm -f "$pid_file" + fi +} + +STOPPED_SOMETHING=false + +# 1. 通过 PID 文件停止 +echo -e "${YELLOW}[1/2] 通过 PID 文件停止服务...${NC}" + +if [ -f "$PID_DIR/backend.pid" ]; then + kill_pid_file "$PID_DIR/backend.pid" "后端服务" + STOPPED_SOMETHING=true +fi + +if [ -f "$PID_DIR/frontend.pid" ]; then + kill_pid_file "$PID_DIR/frontend.pid" "前端服务" + STOPPED_SOMETHING=true +fi + +# 2. 通过端口确保彻底清理 +echo -e "${YELLOW}[2/2] 确保端口已释放...${NC}" + +if kill_port $BACKEND_PORT; then + STOPPED_SOMETHING=true +else + echo -e " ${GREEN}端口 $BACKEND_PORT 已空闲${NC}" +fi + +if kill_port $FRONTEND_PORT; then + STOPPED_SOMETHING=true +else + echo -e " ${GREEN}端口 $FRONTEND_PORT 已空闲${NC}" +fi + +echo "" +if [ "$STOPPED_SOMETHING" = true ]; then + echo -e "${GREEN}" + echo "======================================" + echo " 服务已停止" + echo "======================================" + echo -e "${NC}" +else + echo -e "${YELLOW}" + echo "======================================" + echo " 没有运行中的服务" + echo "======================================" + echo -e "${NC}" +fi \ No newline at end of file