在Windows中,我可以使用CreateProcess(..., CREATE_NEW_CONSOLE, ...)
来启动我的子进程(它是控制台应用程序,而不是GUI),并在一个新窗口中启动。在Mac OS上模拟这个的最简单方法是什么?
open -a Terminal.app $(which program)
运行指定的程序并打开一个新的终端(假设你正在使用bash)。
你可以使用execve()
(在fork()
之后可能)在编译代码中实现相同的功能,而不需要了解任何Apple API(我想应该有一种正确的方法来实现这一点...)。
阅读man open
。
编辑:你不需要指定Terminal.app的路径(finder可以找到它)。
如果你正在运行X,那就更简单了:只需使用xterm -e program &
命令生成一个新的xterm。
阅读man xterm
(这会花费更长的时间...)。
我赞同Chris关于普通mac程序正确使用CLI(或不使用)的观点。在我的业务中,这是预期的,但典型的用户可能会感到{困惑|生气|不满}。
Marc Liyanage用"term",osascript告诉应用程序“Terminal”来整洁地完成这个操作:
http://www.entropy.ch/blog/Mac+OS+X/2005/02/28/Terminal_tricks_8220_term_8221_and_8220_clone_8221.html
(关于“典型用户”:有不同的宇宙,每个宇宙都觉得其他宇宙很奇怪。
从Unix出发,我习惯于可以在文件可以使用的任何位置使用进程或"| pipe args";
这对软件组件化非常有帮助。
但是open -a只能处理文件--不同的宇宙)。