我有一个名为 pgm1 的程序,它使用 fork 创建一个新进程。
然后在此过程中,我使用以下命令启动一个新程序( pgm2 ): execv(exec_path_name,argv)。
但事实是,通过这种方法,我在同一个终端中得到了两个输出。 我一直在寻找一段时间,我找到的唯一解决方案就是这个:
所以我的问题很简单,有没有更简单的方法呢?
提前致谢!
PS:Distro - Ubuntu 11.10 32bit
答案 0 :(得分:1)
我可以想到两种可能的解决方案:
做正确的事(TM)并将您的输出发送到文件:每个进程可以使用不同的文件,既提供明确的输出分隔,又提供更好的记录保存。作为奖励,您也必然会看到性能提升 - 即使是现在,终端输出的计算成本也很高......
使用正确的参数执行终端仿真器:大多数终端仿真器提供了一种代替shell执行特定程序的方法。例如xterm
:
$ xterm top
这将在top
实例中启动xterm
,没有shell。退出top
也会终止xterm
窗口。
如果您选择的终端仿真器支持此功能,您只需修改传递给execv()
的参数即可使用它。当然,在这种情况下,您将实际执行终端模拟器而不是程序,然后将调用您自己的进程。
请记住,根据终端仿真器,任何打开的文件描述符都可能无法正确传递给您的程序 - 终端至少会破坏标准文件描述符。
< / LI> 醇>