47 lines
1.2 KiB
Bash
Executable File
47 lines
1.2 KiB
Bash
Executable File
#!/bin/zsh
|
|
|
|
set -u
|
|
|
|
PROJECT_DIR="${0:A:h}"
|
|
RUN_DIR="$PROJECT_DIR/.run"
|
|
PID_FILE="$RUN_DIR/spine-particle.pid"
|
|
|
|
cd "$PROJECT_DIR" || exit 1
|
|
|
|
if [[ ! -f "$PID_FILE" ]]; then
|
|
echo "没有发现由“启动项目.command”启动的项目进程。"
|
|
exit 0
|
|
fi
|
|
|
|
SERVER_PID="$(tr -dc '0-9' < "$PID_FILE")"
|
|
if [[ -z "$SERVER_PID" ]] || ! kill -0 "$SERVER_PID" 2>/dev/null; then
|
|
rm -f "$PID_FILE"
|
|
echo "项目已经停止。"
|
|
exit 0
|
|
fi
|
|
|
|
SERVER_COMMAND="$(ps -p "$SERVER_PID" -o command= 2>/dev/null || true)"
|
|
if [[ "$SERVER_COMMAND" != *"$PROJECT_DIR/node_modules/vite/"* ]]; then
|
|
echo "PID 已被其他程序占用,为避免误关进程,本次未执行停止操作。"
|
|
echo "当前进程:$SERVER_COMMAND"
|
|
rm -f "$PID_FILE"
|
|
read "?按回车键关闭窗口..."
|
|
exit 1
|
|
fi
|
|
|
|
echo "正在停止 Spine粒子编辑器..."
|
|
kill "$SERVER_PID" 2>/dev/null || true
|
|
for _ in {1..20}; do
|
|
if ! kill -0 "$SERVER_PID" 2>/dev/null; then
|
|
rm -f "$PID_FILE"
|
|
echo "项目已停止。"
|
|
exit 0
|
|
fi
|
|
sleep 0.1
|
|
done
|
|
|
|
echo "普通停止未响应,正在强制结束该项目进程..."
|
|
kill -KILL "$SERVER_PID" 2>/dev/null || true
|
|
rm -f "$PID_FILE"
|
|
echo "项目已停止。"
|