#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""真实超时测试：造一个 sleep 45 的假脚本，用 run_script 限时 3 秒跑，
确认超时后子进程被一起杀掉（无孤儿）。"""
import importlib.util
import os
import subprocess
import time

os.chdir("/root/gov_crawler")
FAKE = "/root/gov_crawler/_kpgtest.py"
with open(FAKE, "w") as f:
    f.write("import time\ntime.sleep(45)\n")

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")))

t0 = time.time()
out, rc, el = m.run_script("_kpgtest.py", "", timeout=3)
print("  返回 %r  rc=%s  elapsed=%ss" % ((out or "")[:60], rc, el))
time.sleep(2)
ps = subprocess.run(["ps", "-eo", "pid,etimes,cmd"], capture_output=True, text=True).stdout
orph = [l.strip() for l in ps.split("\n") if "_kpgtest" in l and "grep" not in l]
print("  孤儿进程: %s" % ("❌ " + str(orph) if orph else "✅ 无"))
os.remove(FAKE)
print("  耗时 %.1fs（应为 ~3s，说明超时立即生效）" % (time.time() - t0))
