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

时间:2008-12-02 03:52:09

标签: macos console terminal

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

3 个答案:

答案 0 :(得分:7)

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

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

阅读 man open

编辑:你不需要指定Terminal.app的路径(查找器可以解决这个问题。)


如果您正在运行X,则更容易:只使用 xterm -e program & 生成一个新的xterm。

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


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

答案 1 :(得分:6)

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

但是,我相信您可以使用终端打开可执行文件,就好像它是一个文档 - 无论是代码还是用户 - 它将在新会话中运行。但是,这是正常的Mac OS X用户体验,不应该通常用于您要提供给最终用户的Mac软件。

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

我要补充一点,如果你正在使用Cocoa,你可以使用NSTask类来轻松启动并与另一个进程交互。

答案 2 :(得分:0)

Marc Liyanage用“术语”巧妙地做到了这一点,osascript告诉应用程序“终端”:
http://www.entropy.ch/blog/Mac+OS+X/2005/02/28/Terminal_tricks_8220_term_8221_and_8220_clone_8221.html

(关于“典型用户”:有不同的宇宙,每个都发现其他宇宙奇怪 来自Unix,我习惯于在任何文件可以使用的过程或“|管道args”;
这极大地帮助了软件组件 但是打开-a只做文件 - 不同的宇宙。)