如何在c+中打开和关闭子应用程序+; 我为Ubuntu编写了一个C++控制台应用程序,它充当一个速率表控制器,接收用户命令并通过TCP发送给一个执行命令的表,并返回信息(如位置和速度)。

如何在c+中打开和关闭子应用程序+; 我为Ubuntu编写了一个C++控制台应用程序,它充当一个速率表控制器,接收用户命令并通过TCP发送给一个执行命令的表,并返回信息(如位置和速度)。,c++,C++,我编写了一个js/electron应用程序,作为位置和速度信息的GUI 我希望我的用户能够在控制台应用程序中键入“GUION”以打开GUI。然后输入“GUIOFF”关闭它。使用系统(“cd rtgui;npm启动”)我可以打开GUI,它运行得非常好-但这不是最优的,因为我无法使用“GUIOFF”命令关闭它,因为(据我所知)同样的终端窗口再次无法访问 我的问题是,有没有比system()更好的方法,我可以访问相同的终端窗口,调用npm start,然后npm stop在用户需要时终止GUI 命令的

我编写了一个js/electron应用程序,作为位置和速度信息的GUI

我希望我的用户能够在控制台应用程序中键入“GUION”以打开GUI。然后输入“GUIOFF”关闭它。使用
系统(“cd rtgui;npm启动”)我可以打开GUI,它运行得非常好-但这不是最优的,因为我无法使用“GUIOFF”命令关闭它,因为(据我所知)同样的终端窗口再次无法访问

我的问题是,有没有比
system()
更好的方法,我可以访问相同的终端窗口,调用
npm start
,然后
npm stop
在用户需要时终止GUI

命令的代码在这里

/*************************************************
 appCommand - checks if the input is a command for this app. 
*************************************************/
bool control::appCommand(string userInput){
    // TODO - RUN THIS COUT IN DEBUG MODE ONLY
    //printf("\nchecking command: %s\n", userInput.c_str());
    
// if "HELP" send help list and return true
    if(userInput == std::string("HELP")){
        helpSection();
        return true; 
    } // if the gui is not enabled, populate it and switch the bool to true
    else if(userInput == std::string("GUION")){
        if(guiEnabled == false){
            printf("\nEnabling GUI.\n");

            system("cd rtgui; npm start");

            // switch bool
            guiEnabled = true;
        }
        // is an app command
        return true;
    } // if the gui is showing, close it.
    else if(userInput == std::string("GUIOFF")){
        if(guiEnabled == true){
            printf("\nDisabling GUI.\n");

            // TODO - Enter PROPER code to close GUI here.
            system("cd rtgui; npm stop");

            // switch bool
            guiEnabled = false;
        }
        // is an app command
        return true;
    }
    else if(userInput == string("QUIT")){
        // We want to close connections - set connected to false.
        isConnected = false;
        // is an app command
        return true;
    }

    return false;
}

你应该把你的问题包括在这个操作系统中;答案将是特定于操作系统的。@Sneftel我在第一句话中说了ubuntu。所以Linux。您可以
fork()
exec()
这将为您提供子进程的pid(进程id),它可以与
kill()
一起使用,以请求程序退出。这应该提供足够的信息来查找它。@asynts我查看了
fork()
,它似乎只打开了当前进程的一个副本。而
exec()
似乎将调用进程替换为新进程。我需要继续使用我的第一个进程-实际的控制器,因为它处理ZMQ连接。子进程(my gui)借助ZMQ连接处理恒定位置和速度轮询,同时用户能够继续发送命令。Unix/Linux创建新子进程的方法是
fork
(),然后在子进程中执行
exec()
,父进程在此进程中保持活动状态。
fork()
的返回值可用于判断当前进程是子进程还是父进程。互联网上有很多这样的例子。