在Windows上,我可以CreateProcess(..., CREATE_NEW_CONSOLE, ...)
,我的子进程(控制台应用程序,而不是GUI)将在新窗口中启动。在Mac OS上模拟此操作的最简单方法是什么?
答案 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只做文件 - 不同的宇宙。)