1

我正在 Ubuntu 上编写一个 C++ 控制台程序来专门管理游戏服务器“我的世界”,编写它是为了学习目的,因此对任何选项都持开放态度,它确实必须遵循我所做的。

我想执行 minecraft 服务器,然后检查它是否还活着,我还希望能够从 C++ 程序向它发送命令,例如“/stop”,它将优雅地关闭它,而不是仅仅使用“kill” ”。

pid_t pid;
pid = fork();
cout << pid << endl;

switch (pid)
{
    case -1:
        break;
    case 0:
        cout << "Child Process" << endl;

        //WAITS HERE, CANT MOVE ON, IS THERE A FIX?
        execlp("java", "java", "-jar", filetoexec, "nogui");
        cerr << "Failed" << endl;
        while(true)
        {
            //WANT if (isMinecraftAlive()) echo yay!!!
            cout << "Child Tick..." << getpid() << endl;
            sleep(4);
        }
        break;
    default:
        cout << "Parent Process" << endl;
        while(true)
        {
            cout << "Parent Tick..." << getpid() << endl;
            //WANT TO SEND "/list" to CHILD and it EXEC on MINECRAFT;
            sleep(4);
        }
        //execv("test", NULL);
        break;
}

我想做的事:

在“ execlp("java", "java", "-jar", filetoexec, "nogui");”之后,我希望能够对其进行操作IsAlive(),基本上确保服务器仍在响应。我注意到在继续execlp之前等待进程完成它正在做的事情是一个问题,因为它是一个永远活着的游戏服务器。

非常感谢所有帮助,正如我上面所说,这是一项学习任务,但我对此感到困惑。

4

0 回答 0