【问题标题】:Execlp execute in another terminalexeclp 在另一个终端执行
【发布时间】:2017-04-13 22:40:06
【问题描述】:

我正在用 C 语言创建一个应用程序,我必须使用命令 execlp 执行 firefox,但每次执行它时,我都会“丢失”我当前的终端,但在 execlp 之后我仍然需要使用终端我以前是这样的,所以我的问题是:有没有一种方法可以让我在一个终端调用execlp 中执行另一个而不阻塞我所在的那个?

这是我的代码的 sn-p:

    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

【问题讨论】:

  • “失去”你当前的终端”到底是什么意思?你的意思是它失焦了吗?
  • 在我为我执行 exec 以继续使用同一个终端后,我必须按任意键或终止我的程序,这就是我说我失去终端时的意思。
  • 我无法重现这种行为。你用的是什么操作系统?

标签: c linux shell exec


【解决方案1】:

如果我对您的理解正确,您是说您的程序启动 Firefox,然后一直控制您的外壳,直到 Firefox 终止。如果是这种情况,有几种方法可以解决这个问题。

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

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

【讨论】:

  • 另请参阅this related question,了解运行程序以使其在新的单独终端窗口中启动的方式。
猜你喜欢
  • 2012-01-30
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 2016-04-13
相关资源
最近更新 更多