我正在 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
之前等待进程完成它正在做的事情是一个问题,因为它是一个永远活着的游戏服务器。
非常感谢所有帮助,正如我上面所说,这是一项学习任务,但我对此感到困惑。