【问题标题】:How to switch terminal to new child process of process launched with NSTask?如何将终端切换到使用 NSTask 启动的进程的新子进程?
【发布时间】:2011-09-25 11:08:18
【问题描述】:

我用这里描述的方法做了一个伪终端: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$ 

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

【问题讨论】:

  • 平台是什么? IOS?苹果电脑? Linux?
  • @DavidePiras 我在 Mac OS X 10.7 上。

标签: macos terminal spawn pty job-control


【解决方案1】:

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

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

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

sudo 运行良好,我相信ssh 也应该可以运行。

【讨论】:

    【解决方案2】:

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

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

    有关 pty 命令行工具,请参阅 here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 2018-09-14
      • 2017-11-26
      • 2013-12-18
      • 2016-06-26
      • 2023-03-20
      相关资源
      最近更新 更多