我使用此处描述的方法创建了一个伪终端: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
,它会安静地终止。 (我使用活动监视器进行了检查)
fg
fg
ftp
bash-3.2$
fg
fg
bash: fg: current: no such job
bash-3.2$
我认为它需要更多的基础设施(完成伪终端)来将控制切换到子进程。这需要做什么?
答案 0 :(得分:1)
我最终可以通过创建pty
设备来实现此目的。为了使程序表现得像"终端",它必须在交互式终端中执行,并且需要伪终端设备。
不幸的是,AFAIK,NSTask
不支持任何pty
能力,所以我不得不进入BSD层。
这是我当前的实施:https://github.com/eonil/PseudoTeletypewriter.Swift
sudo
效果很好,我相信ssh
也应该有用。
答案 1 :(得分:0)
查看MFTask和PseudoTTY.app的源代码(适用于Mac OS X 10.6)。
请参阅:http://www.cocoadev.com/index.pl?NSTask
对于pty命令行工具,请参阅here。