Запуск процесса в новом окне терминала на Mac - PullRequest
3 голосов
/ 02 декабря 2008

В Windows я могу сделать CreateProcess(..., CREATE_NEW_CONSOLE, ...), и мой дочерний процесс (который является консольным приложением, а не GUI) будет запущен в новом окне. Какой самый простой способ эмулировать это в Mac OS?

Ответы [ 3 ]

7 голосов
/ 02 декабря 2008

open -a Terminal.app $(which program) получает новый терминал, на котором запущена указанная программа (при условии, что вы используете bash).

Вы можете использовать execve() (возможно после fork()), чтобы получить то же самое в скомпилированном коде, не зная каких-либо API-интерфейсов Apple (я думаю, что есть правильный путь сделать это ...).

Чтение man open.

Редактировать: вам не нужно указывать путь к Terminal.app (это может выяснить искатель).


Если у вас запущен X, это еще проще: просто создайте новый xterm с xterm -e program &.

Чтение man xterm (что займет больше времени ...).


Я сообщу Крису о правильном использовании (или его отсутствии) CLI для обычных программ Mac. В моем бизнесе это ожидается, но типичный пользователь будет {растерян | сердит | несчастен}.

6 голосов
/ 02 декабря 2008

Терминал (Terminal.app, который вы называете «консолью») - это просто еще одно приложение уровня пользователя в Mac OS X, а не возможность операционной системы. В различных API, доступных в Mac OS X, нет прямого способа просто запустить исполняемый файл в новом окне терминала.

Однако я полагаю, что вы можете открыть исполняемый файл с помощью терминала, как если бы это был документ - будь то код или пользователь - и он запустится в новом сеансе. Тем не менее, это , а не обычное взаимодействие с Mac OS X, и не следует обычно использовать в программном обеспечении Mac, которое вы собираетесь доставить конечным пользователям.

Приложения Mac OS X являются приложениями. Хорошо предоставлять инструменты, с которыми опытные пользователи могут взаимодействовать через Терминал, но Терминал никоим образом не формирует и не заменяет реальное приложение при доставке программного обеспечения конечным пользователям.

Я добавлю к этому, что если вы используете Какао, вы можете использовать класс NSTask , чтобы очень легко запускать и взаимодействовать с другим процессом.

0 голосов
/ 03 февраля 2009

Марк Лиянэйдж делает это аккуратно с «термином», как говорит приложение «Терминал» в osascript:
http://www.entropy.ch/blog/Mac+OS+X/2005/02/28/Terminal_tricks_8220_term_8221_and_8220_clone_8221.html

(На «типичных пользователях»: существуют разные вселенные, каждая находит странных.
Исходя из Unix, я привык к процессу или «| pipe args» везде, где можно использовать файл;
это очень помогает программным компонентам.
Но открыть -a только файлы - другой мир).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...