Как переключить терминал на новый дочерний процесс, запущенный с помощью NSTask? - PullRequest
1 голос
/ 25 сентября 2011

Я сделал псевдотерминал с методом, описанным здесь: 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 ]

1 голос
/ 12 января 2015

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

К сожалению, AFAIK, NSTask не поддерживает какие-либо способности pty, поэтомуМне нужно было перейти к слою BSD.

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

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

0 голосов
/ 26 сентября 2011

Посмотрите исходный код MFTask и PseudoTTY.app (который работает на Mac OS X 10.6).

См .: http://www.cocoadev.com/index.pl?NSTask

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

...