C++ 在新终端中使用exec启动新程序
我有一个名为pgm1的程序,它使用fork创建一个新进程 然后在此过程中,我使用以下命令启动一个新程序(pgm2): execv(execpath\u name,argv) 但问题是,用这个方法,我在同一个终端上得到了两个输出。 我已经搜索了一段时间,我找到的唯一解决方案是:C++ 在新终端中使用exec启动新程序,c++,c,linux,unix,C++,C,Linux,Unix,我有一个名为pgm1的程序,它使用fork创建一个新进程 然后在此过程中,我使用以下命令启动一个新程序(pgm2): execv(execpath\u name,argv) 但问题是,用这个方法,我在同一个终端上得到了两个输出。 我已经搜索了一段时间,我找到的唯一解决方案是: 使用系统调用打开新的终端 使用此软件将我的pgm2连接到新终端 所以我的问题很简单,有没有更简单的方法 提前谢谢 PS:Distro-Ubuntu11.10 32位我可以想出两种可能的解决方案: 做正确的事情(TM)并
- 使用系统调用打开新的终端
- 使用此软件将我的pgm2连接到新终端
PS:Distro-Ubuntu11.10 32位我可以想出两种可能的解决方案:
xterm
:
$ xterm top
这将在无外壳的xterm
实例中启动top
。退出top
也会终止xterm
窗口
如果您选择的终端仿真器支持此功能,则只需修改传递给execv()
的参数即可使用它。当然,在这种情况下,您将实际执行终端仿真器,而不是您的程序,该程序将调用您自己的进程
请记住,根据终端仿真器的不同,任何打开的文件描述符都可能无法正确传递到您的程序-终端至少会损坏标准文件描述符你真的想启动一个新的终端吗?是的,这就是我想要的,每个程序一个终端。那么
$bash-cprg1
呢?执行它。我认为这不适合我的代码,因为我确实需要使用execv启动我的程序,原因很少。你的pgm2在做什么?为什么您不能popen
它或使用多个管道
-s?为什么你真的需要另一个终端?第一个解决方案似乎是正确的,你给出的论点说服了我这么做。但如何将这些文件显示到不同的终端?使用系统调用:tail-f@Atha:如果您觉得有必要,您可以使用第二种解决方案启动windows,使用less
或tail-f
。。。