1

我用这里描述的方法做了一个伪终端:http: //lists.apple.com/archives/student-dev/2005/Mar/msg00019.html

终端本身运行良好。无论如何,问题是终端无法切换到子进程。例如,我使用 启动bashNSTask如果我ftp在 中执行bash,它会自动停止。

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

如果我尝试继续ftpwith fg,它会安静地终止。(我用活动监视器检查了这个)

fg
fg
ftp

bash-3.2$ 

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

我认为它需要更多的基础设施(完成伪终端)才能将控制权切换到子进程。这样做需要什么?

4

2 回答 2

1

我终于可以通过创建一个pty设备来做到这一点。要使程序表现得像“终端”,它必须在交互式终端中执行,这需要伪终端设备。

不幸的是,AFAIKNSTask不支持任何pty能力,所以我不得不深入到 BSD 层。

这是我当前的实现:https ://github.com/eonil/PseudoTeletypewriter.Swift

sudo运作良好,我相信ssh也应该有效。

于 2015-01-12T13:32:50.667 回答
0

查看 MFTask 和 PseudoTTY.app 的源代码(适用于 Mac OS X 10.6)。

见:http ://www.cocoadev.com/index.pl?NSTask

对于 pty 命令行工具,请参见此处

于 2011-09-26T12:32:22.070 回答