我正在Ubuntu上编写一个C ++控制台程序,专门管理一个游戏服务器“我的世界”,为了学习目的而编写它,对任何选项都是开放的,它必须遵循我已经完成的工作。
我想执行minecraft服务器,然后能够检查它是否还活着,我也希望能够从C ++程序向它发送命令,如“/ stop”,它将优雅地关闭它而不仅仅是用“杀”。
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
在继续之前等待进程完成它正在做的事情,因为这是一个永远存在的游戏服务器。
非常感谢所有帮助,正如我上面所说,这是一项学习任务,但我对此感到难过。