Как переключить терминал на новый дочерний процесс, запущенный с помощью NSTask?

Я сделал псевдо-терминал с помощью метода, описанного здесь: http://lists.apple.com/archives/student-dev/2005/Mar/msg00019.html

Сам терминал работал хорошо. В любом случае проблема заключается в том, что терминал не может быть переключен на дочерний процесс. Для примера я запустил bash с NSTaskи если я выполню ftp в пределах bash, он останавливается автоматически.

ftp
ftp
ftp> 
[1]+  Stopped                 ftp
bash-3.2$ 

И если я попытаюсь продолжить ftp с fgоканчивается тихо. (Я проверил это с помощью Activity Monitor)

fg
fg
ftp

bash-3.2$ 

fg
fg
bash: fg: current: no such job
bash-3.2$ 

Я думаю, что для переключения управления на дочерний процесс нужна еще какая-то инфраструктура (которая завершает псевдотерминал). Что для этого нужно?

2 ответа

Решение

Я мог бы наконец сделать это, создав pty устройство. Чтобы программа работала как "Терминал", она должна выполняться в интерактивном терминале, и для этого требуется псевдотерминальное устройство.

К сожалению, AFAIK, NSTask не поддерживает pty способность, поэтому мне пришлось спуститься на уровень BSD.

Вот моя текущая реализация: https://github.com/eonil/PseudoTeletypewriter.Swift

sudo работает хорошо, и я верю ssh также должен работать.

Взгляните на исходный код MFTask и PseudoTTY.app (который работает на Mac OS X 10.6).

Смотрите: http://www.cocoadev.com/index.pl?NSTask

Для инструмента командной строки pty смотрите здесь.

Другие вопросы по тегам