You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何关闭通过Node.js spawn()创建的Minecraft服务器进程?

解决Node.js中Minecraft服务器无法通过kill()关闭的问题

你遇到的问题是因为kill()仅终止了启动Minecraft服务器的父Java进程,实际运行服务器的是它的子进程,所以父进程被终止后子进程仍会持续运行。正确的做法是通过Minecraft服务器控制台发送/stop命令,让服务器优雅地自行关闭。

实现方法

通过Node.js进程的stdin向Minecraft服务器写入/stop命令,注意必须加上换行符(\n)——服务器控制台需要回车触发命令执行:

// 在需要关闭服务器的位置执行
mcserver.process.stdin.write('/stop\n');

完整示例(含错误处理)

为避免写入失败(比如进程已结束),可以添加简单的错误处理逻辑:

// 创建服务器进程的代码保持不变
mcserver.process = spawn("java", [
    "-Xmx1024M",
    "-Xms1024M",
    "-jar",
    "server.jar",
    "nogui"],
    {
        cwd: mcserver.dir,
    }
);

mcserver.process.on("exit", () => {
    console.log("minecraft server exit lol");
});

// 监听stdin写入错误,避免异常抛出
mcserver.process.stdin.on('error', (err) => {
    console.error('写入关闭命令失败:', err);
});

// 封装关闭服务器的函数
function stopMcServer() {
    if (mcserver.process && mcserver.process.stdin.writable) {
        mcserver.process.stdin.write('/stop\n');
        console.log('已向服务器发送关闭命令');
    } else {
        console.log('服务器进程已关闭或无法写入命令');
    }
}

// 在需要的地方调用该函数即可
// stopMcServer();

发送/stop命令后,Minecraft服务器会自动保存数据并终止所有相关进程,不会出现残留进程的问题。

内容的提问来源于stack exchange,提问作者arthurgps2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:55:25