我用下面描述的方法制作了一个伪终端:http://lists.apple.com/archives/student-dev/2005/Mar/msg00019.html
终端本身工作良好。无论如何,问题是终端不能切换到子进程。例如,我用NSTask
启动bash
,如果我在bash
中执行ftp
,它会自动停止。
ftp
ftp
ftp>
[1]+ Stopped ftp
bash-3.2$
如果我尝试用fg
继续ftp
,它会安静地终止。(我用Activity Monitor检查了这个)
fg
fg
ftp
bash-3.2$
fg
fg
bash: fg: current: no such job
bash-3.2$
我认为它需要更多的基础设施(完成伪终端)来将控制切换到子进程。要做到这一点需要什么?
我最终可以通过创建pty
设备来做到这一点。要使一个程序表现得像"终端",它必须在交互式终端中执行,这就需要伪终端设备。
不幸的是,NSTask
不支持任何pty
的能力,所以我不得不进入BSD层。
sudo
工作良好,我相信ssh
也应该工作。
看一下MFTask和PseudoTTY的源代码。app(在Mac OS X 10.6上运行).
见:http://www.cocoadev.com/index.pl?NSTask
关于pty命令行工具,请参见这里。