Execlp在另一个终端执行

时间:2017-04-13 22:40:06

标签: c linux shell exec

我在C中创建一个应用程序,我必须使用命令execlp执行firefox,但每次执行它时我都会丢失"我当前的终端,但在execlp之后我仍然需要使用我以前的终端,所以我的问题是:有没有办法我可以在一个终端呼叫execlp中执行另一个没有挡住我所在的那个?

这是我的代码片段:

    pid_t child = fork();
if (child == -1) {
    perror("fork error");
} else if (child == 0) {
    exec_pid = getpid();
    execlp("firefox", "firefox", URL, NULL);
    perror("exec error");
} 
    // keep with program logic

1 个答案:

答案 0 :(得分:2)

如果我正确理解你,那么你说你的程序会启动Firefox,然后控制你的shell直到Firefox终止。如果是这种情况,可以采用以下几种方法。

最简单的解决方案是在后台运行您的程序。执行它./my_program &,它将在一个单独的过程中启动,您的终端控制将立即返回给您。

如果要从C代码中解决此问题,第一步是在fork之后打印出子进程的进程ID。在单独的shell中,使用ps来监视程序和分叉PID。确保您的程序实际上已经终止,并且它不仅仅是等待某些事情。