我在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
答案 0 :(得分:2)
如果我正确理解你,那么你说你的程序会启动Firefox,然后控制你的shell直到Firefox终止。如果是这种情况,可以采用以下几种方法。
最简单的解决方案是在后台运行您的程序。执行它./my_program &
,它将在一个单独的过程中启动,您的终端控制将立即返回给您。
如果要从C代码中解决此问题,第一步是在fork之后打印出子进程的进程ID。在单独的shell中,使用ps
来监视程序和分叉PID。确保您的程序实际上已经终止,并且它不仅仅是等待某些事情。