import type { ChildProcess } from "node:child_process"; type Cleanup = () => Promise | void; /** 收到过信号没有。主流程据此闭嘴:信号处理正在收尾并会自己退出,别再打印报告、发 ping、写记录。 */ export declare function interrupted(): boolean; /** * 收到信号之后不再开始新的一步(起容器、跑 pg_restore、跑检查命令)。清理在跑的时候主流程还活着, * 一个刚返回的探测会接着往下走:不拦的话,清理快照之后才起的沙箱就没人删了(交叉审查)。 */ export declare function throwIfInterrupted(): void; /** 登记一个中断时要跑的清理;返回注销函数,正常走完后调用。 */ export declare function onInterrupt(cleanup: Cleanup): () => void; /** * 中断时停掉一个子进程。先 SIGTERM 给它收尾的机会,2 秒后还在就 SIGKILL。 * group:子进程自成进程组(detached,如 --check-cmd),按组发信号,连它派生的进程一起停。 * 看的是**整组**还在不在,不是组长:shell 收到 SIGTERM 先退了,忽略 SIGTERM 的孙进程还在, * 只盯组长就会跳过 SIGKILL 把它留下(交叉审查复现)。 */ export declare function stopOnInterrupt(child: ChildProcess, opts?: { group?: boolean; }): () => void; /** * CLI 专用:在 what(比如 "drill")运行期间接管 SIGINT/SIGTERM。第一次收到信号时跑完登记的清理, * 以 130(SIGINT)/ 143(SIGTERM)退出;清理途中再按一次 Ctrl+C 就不等了,直接退出 * (1 秒内重复到达的同一个信号不算,见 REPEATED_SIGNAL_GRACE_MS)。 * 返回卸载函数。 */ export declare function exitCleanlyOnSignals(what: string): () => void; export {};