背景
笔者近期从事在线IDE工作的开发,作为本地IDE普遍拥有的功能,terminal(命令行)对项目的git操作以及文件操作有着非常强大的支持。而之前没有web伪终端的情况下,仅仅提供已封装好的git命令完全不能满足开发者使用,因此为了更好的用户体验,web伪终端的开发也就提上日程。
关于终端(tty)与伪终端(pty)的区别,大家可以参考What do pty and tty mean?
调研
终端,在我们认知范围内略同于命令行工具,通俗点说就是可以执行shell的进程。每次在命令行中输入一串命令,敲入回车,终端进程都会fork一个子进程,用来执行输入的命令,终端进程通过系统调用wait4()监听子进程退出,同时通过暴露的stdout输出子进程执行信息。
如果在web端实现一个类似于本地化的终端功能,需要做的可能会更多:网络时延及可靠性保证、shell用户体验尽量接近本地化、web终端UI宽高与输出信息适配、安全准入控制与权限管理等。在具体实现web终端之前,需要评估这些功能那些是最核心的,很明确:shell的功能实现及用户体验、安全性(web终端是在线上服务器中提供的一个功能,因此安全性是必须要保证的)。只有在保证这两个功能的前提下,web伪终端才可以正式上线。