2017-04-13 56 views
0

我创造C中的应用程序,我有命令execlp,但每次我执行它我“丢失”我目前的终端的时间来执行Firefox,但在execlp后,我仍然需要使用终端,我以前,所以我的问题是:有没有一种方法,我可以在一个终端电话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 
+0

你说的“‘失去’你当前终端”究竟意味着什么?你的意思是它没有注意力吗? – rici

+0

http://stackoverflow.com/questions/11807688/how-to-detach-a-process-from-terminal-in-unix – stark

+0

我执行exec后继续使用相同的终端我必须按任意键或者杀了我的程序,所以这就是我说我丢了终端的意思。 –

回答

2

如果我正确认识你,你说你的程序启动火狐,然后让你的外壳的控制,直到火狐终止。如果是这种情况,有几种方法可以解决这个问题。

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

如果你想从你的C代码解决这个问题,第一步将是叉后打印出来的子进程的进程ID。在单独的shell中,使用ps来监视您的程序和分叉的PID。确保你的程序实际上正在终止,并且它不仅仅是等待某件事。

+0

另请参见[此相关的问题](https://askubuntu.com/questions/484993/run-command-on-anothernew-terminal-window),用于运行的程序,使得它在一个新的,单独的终端窗口启动的方式。 – bta