#!/bin/bash

# 定义要匹配的特征路径
TARGET_PATH="/opt/kylin-wine/printer_engine/"

# 函数：扫描并杀死符合条件的进程
# 参数 1: 信号 (如 -15 或 -9)
# 参数 2: 动作描述 (如 "优雅终止" 或 "强制杀死")
scan_and_kill() {
    local signal=$1
    local action_name=$2

    # 获取当前用户的所有进程 PID
    # 注意：ps -u $USER 确保只操作自己的进程，避免权限错误
    readarray -t pids < <(ps -u "$USER" -o pid=)

    for pid in "${pids[@]}"; do
        # 去除可能的空格
        pid=$(echo "$pid" | tr -d ' ')

        # 检查进程是否还存在
        if [[ ! -d "/proc/$pid" ]]; then
            continue
        fi

        # 检查 /proc/[pid]/maps 是否包含目标路径
        # grep -q 安静模式，只返回状态码
        # 2>/dev/null 忽略没有权限读取 maps 的错误
        if grep -q "$TARGET_PATH" "/proc/$pid/maps" 2>/dev/null; then
            # 获取进程命令用于显示
            cmd=$(cat "/proc/$pid/cmdline" 2>/dev/null | tr '\0' ' ' | head -c 50)

            echo "[$action_name] PID: $pid | 命令: $cmd..."
            kill "$signal" "$pid" 2>/dev/null
        fi
    done
}

# 1. 第一次尝试：优雅终止 (SIGTERM)
scan_and_kill -15 "SIGTERM"

# 等待进程自行关闭
sleep 2

# 2. 第二次尝试：强制终止 (SIGKILL)
# 再次扫描，因为有些进程可能在第一步已经退出了
scan_and_kill -9 "SIGKILL"

echo "Cleanup finished."
