#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""验证调度器的 killpg 修复：让 run_script 跑一个 sleep 子进程，限时 3 秒，
确认超时后子进程被一起杀掉（而不是变孤儿）。"""
import importlib.util
import os
import subprocess
import time

os.chdir("/root/gov_crawler")
spec = importlib.util.spec_from_file_location("cs2", "/root/gov_crawler/crawl_scheduler_v2.py")
m = importlib.util.module_from_spec(spec)
spec.loader.exec_module(m)
print("模块加载 ✅  has os=%s has signal=%s" % (hasattr(m, "os"), hasattr(m, "signal")))

print()
print("=== 测试：跑一个 sleep 45 的脚本，timeout=3 ===")
t0 = time.time()
out, rc, el = m.run_script("/bin/sh -c 'sleep 45'", "", timeout=3)
print("  返回: %r  rc=%s  elapsed=%ss" % ((out or "")[:60], rc, el))

time.sleep(2)
# 检查是否还有游离的 sleep 45
ps = subprocess.run(["ps", "-eo", "pid,etimes,cmd"], capture_output=True, text=True).stdout
orphan = [l for l in ps.split("\n") if "sleep 45" in l and "grep" not in l]
print()
if orphan:
    print("  ❌ 仍有孤儿进程：")
    for l in orphan:
        print("     " + l.strip())
else:
    print("  ✅ 无孤儿残留 —— killpg 生效")
