execlp 在另一个终端执行

Execlp execute in another terminal

我正在用 C 创建一个应用程序,我必须使用命令 execlp 来执行 firefox,但每次我执行它时我 "lost" 我当前的终端,但是在 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

如果我没理解错的话,您是说您的程序启动 Firefox,然后保持对 shell 的控制,直到 Firefox 终止。如果是这种情况,有几种解决方法。

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

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