【问题标题】:Start new mac terminal window with new process使用新进程启动新的 mac 终端窗口
【发布时间】:2020-06-18 04:56:08
【问题描述】:

我正在使用 fork() 创建新进程。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <ncurses.h>
#include <iostream>
#include <time.h>

int main (void) 
{
    switch (fork())
    {
        case -1: exit(0);
        case 0: {
            execl("Terminal.app", "shell", "-e", "time ls; shell", (char*)0);
            break;
        }
        default: {
            std::cout << "OK" << std::endl;
            initscr();
            time_t secs = time(NULL);
            tm* timeInfo = localtime(&secs);
            printw("TIME: %s", asctime(timeInfo));
            getch();
            endwin();
        }
    }   
    return 0;
}

这段代码应该创建新的控制台窗口并生成time ls,但它没有。有什么问题?

【问题讨论】:

  • 它有什么作用?您是否尝试过调用 open -a Terminal.app 而不仅仅是 Terminal.app?
  • @RichardBarber,我会尝试从一个控制台窗口打开另一个
  • 您的意思是 Terminal.app 的单独实例。
  • 您还需要-n 标志。

标签: c++ macos terminal process fork


【解决方案1】:

使用命令open -a -n Terminal.app 运行应用程序的新实例(即使已经运行)。

【讨论】:

  • 真的吗?我想从我的 c++ 程序中执行此操作,而不是从控制台。
  • 是的,不要使用应用容器的名称来执行它。使用open
  • 你必须解析它以适应它
  • 以防万一其他人遇到此答案,我需要将命令更改为 open -n -a Terminal.app 以使其正常工作。我还引用了ss64.com/osx/open.html
猜你喜欢
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 2022-08-07
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 2019-05-05
  • 2018-09-14
相关资源
最近更新 更多