在scm (一个方案解释器)中进行一些测试时,我有意关闭了当前输入端口(相当于标准输入文件描述符)。一旦程序在REPL中运行,事情就会变得疯狂,系统地打印错误信息。我的问题是:如何恢复对进程的控制,即如何重新建立该进程的输入文件描述符?
搜索“正在运行的进程的文件描述符”或类似的内容,我找不到一篇有用的文章。
提前感谢
系统信息: Debian 10。
发布于 2021-04-28 16:07:13
您几乎肯定做不到,尽管这在一定程度上取决于语言级端口如何映射到底层OS级I/O系统。
如果您所做的是关闭OS级别的标准输入,那么所有内容都会丢失:
要想生存下去,唯一的办法是让两件事中的一件是真实的:
基本上,一旦OS级别的标准输入消失了,任何需要从它获取输入的东西都是注定的:如果没有操作系统级的操作,就不能将它放回去。
然而,实现可能将单个OS级I/O流映射到多语言级别的流,而关闭其中的一个流将给系统留下一些它仍然可以谈论的、仍然引用OS级标准输入的最后流。公共Lisp是一个系统的例子,它可以(取决于配置)来实现这一点。例如,它有*standard-input* *error-output*、*query-io*、*terminal-io*和其他流,而且很有可能出现这样的情况,例如,*standard-input*已经关闭,导致读取错误,但是*query-io*仍然指向某个位置,它的末尾有一个人。
我不知道scm是否会这么做。
https://stackoverflow.com/questions/67282391
复制相似问题