frpc.ts 843 字节
export function createFrpc(frpcPath: string, configPath: string) {
    const { spawn } = require("child_process");
    
    console.log("启动 frpc ...");

    // 1. 启动 frpc 进程
    const frpc = spawn(frpcPath, ["-c", configPath], {
        stdio: "inherit", // 共享输入输出
    });

    // 2. 监听 Node.js 退出事件并关闭 frpc
    function cleanup() {
        if (!frpc.killed) {
            frpc.kill("SIGTERM"); // 发送终止信号
        }
    }

    // 捕获各种退出信号
    process.on("exit", cleanup);
    process.on("SIGINT", () => {
        cleanup();
        process.exit();
    });
    process.on("SIGTERM", () => {
        cleanup();
        process.exit();
    });

    // 3. 监听 frpc 的退出
    frpc.on("exit", (code) => {
        console.log(`frpc 已退出,代码: ${code}`);
    });
}