frpc.ts 891 字节
export function createFrpc(configPath: string) {
    const { spawn } = require("child_process")
    const path = require('path')

    console.log("启动 frpc ...")

    // 1. 启动 frpc 进程
    const frpc = spawn(path.join(__dirname, '..', '..', 'frp', 'frpc'), ["-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}`);
    });
}