在Mac上的新终端窗口中启动进程

3 macos terminal console

在Windows上我可以做CreateProcess(..., CREATE_NEW_CONSOLE, ...),我的子进程(控制台应用程序,而不是GUI)将在新窗口中启动.在Mac OS上模拟此操作的最简单方法是什么?

dmc*_*kee 7

open -a Terminal.app $(which program) 获取一个运行指定程序的新终端(假设您正在使用bash).

您可以使用execve()(可能在a之后fork())在编译代码中实现相同的功能,而无需了解任何Apple API(我想有一种正确的方法可以做到这一点......).

man open.

编辑:您不需要指定Terminal.app的路径(查找器可以计算出来).


如果你有X运行,它甚至更容易:只生成一个新的xterm xterm -e program &.

阅读man xterm(这需要更长的时间......).


对于普通的mac程序,我将第二个关于正确使用(或缺少)CLI的Chris.在我的商业中,这是预期的,但典型的用户将{confused | angry | unhappy}.


Chr*_*son 6

终端(Terminal.app,你所说的"控制台")只是Mac OS X上的另一个用户级应用程序,而不是操作系统的功能.在Mac OS X上可用的各种API中没有直接的方法可以在新的终端窗口中启动可执行文件.

但是,我相信您可以使用终端打开可执行文件,就好像它是一个文档 - 无论是代码还是用户 - 它将在新会话中运行.然而,这是不是一个正常的Mac OS X的用户体验,不应该普遍在Mac软件中使用你将交付给最终用户.

Mac OS X应用程序是应用程序.提供高级用户可以通过终端进行交互的工具是很好的,但是在向最终用户交付软件时,终端绝不会塑造或形成真实应用程序的替代品.

我将补充一点,如果你使用Cocoa,你可以使用NSTask类来启动并非常容易地与另一个进程交互.