「标准流子进程。豫」供无 PTY 会话,以当前用户身起绝对径程序,别返可写 stdin、可读 stdout 与 stderr。三父端皆非阻塞,别启他程序时自闭;stdin 用本地连接,子进程闭入后再写惟返误,不以 SIGPIPE 断宿主。调用者须治部分写入、EOF、三端之闭及子进程之收。此术不改用户身、不净继承环境,亦不释远客命令;高权限多用户 SSHD 须另备身份与环境之策。
「等待连接与标准流」以一原生 poll 兼候 SSH 网连与三常流;调用者以关注位择 stdin 可写、stdout 可读、stderr 可读,返固定四位之事件码。已闭之端可授 -1 且去其关注位,免挂断事致空转。
「检验标准流命令」于 SSH exec 原字入子进程参列前,拒空、逾六万五千五百三十六字及内零;不改其文,亦不能代 SSHD 授权。调用者惟认证用户、定执行之策后,方可授命于 shell。
「发送标准流程序信号」与「发送伪终端程序信号」依 RFC 4254 常名求宿主 SIG* 号,惟向本库仍在籍 PID 或 PTY 进程组发之;未知名返 -EINVAL。其反求名之术,宿主退出信号号若不知则返空字。
「收取标准流程序」与「收取伪终端程序」返四整数:态、常退码、终止信号号、核心转储记。态零为未终,一为常退,二为信号所断;惟态二时,信号号与转储记可用于 exit-signal。
待办之事:旧之 C 实(openpty 伪终端与标准流子进程)随编译器改为唯一 Wasm 后端而删,Node 宿主未备此二组原语,呼之则报“未实现 Node 宿主原语”;下述乃接口之约。此包旧施于原生 macOS/Linux,以 openpty 开主从伪终端,备非阻塞读写、可读可写之候、窗尺寸之设与取、原始模式之设、独禁回显及描述符之闭。开返状态码与二描述符;零为成,负数为 -errno。读返所得字数与字节串;零为终,兼纳 Linux PTY 彼端闭时之 EIO;负数为余系统误或暂不可读。写返已写数或负误码。候可写惟 POLLOUT 返一,逾时返零,挂断或误返负。原始模式除规范行缓冲及回显;独禁回显则存规范行与 EOT 终流之义。会话层须依客户所请而定其用否。
调用者须各闭主从描述符。读写不启子进程,亦不立控制终端;SSHD 尚须先核授权、掌会话寿命,再接受控程序启动之术。窗尺寸以宿主 winsize 十六位无符号数为界。
「伪终端子进程。豫」得以当前用户之身,启明定绝对径程序。子进程另立会话,复开 PTY 从端为三常流,得控制终端;宿主若无 POSIX_SPAWN_SETSID 则返 -ENOTSUP。接口惟受程序径及参数列,不释 shell 命令;远方 exec 之文仍须 SSHD 另行授权并映射。调用者须以非阻塞收取术回收;终止术向在籍进程组发 SIGTERM。此术不改用户身份,亦不净继承环境,不可径施于高权限多用户 SSHD。