首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >恢复关闭输入描述符进程的控制

恢复关闭输入描述符进程的控制
EN

Stack Overflow用户
提问于 2021-04-27 11:42:38
回答 1查看 37关注 0票数 0

在scm (一个方案解释器)中进行一些测试时,我有意关闭了当前输入端口(相当于标准输入文件描述符)。一旦程序在REPL中运行,事情就会变得疯狂,系统地打印错误信息。我的问题是:如何恢复对进程的控制,即如何重新建立该进程的输入文件描述符?

搜索“正在运行的进程的文件描述符”或类似的内容,我找不到一篇有用的文章。

提前感谢

系统信息: Debian 10。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-28 16:07:13

您几乎肯定做不到,尽管这在一定程度上取决于语言级端口如何映射到底层OS级I/O系统。

如果您所做的是关闭OS级别的标准输入,那么所有内容都会丢失:

  1. REPL尝试从标准输入读取,当它关闭时得到一个错误;
  2. 试图引发一些错误,这将涉及提示用户输入.
  3. .从标准输入,这是关闭的,因此它得到错误;
  4. 游戏结束.

要想生存下去,唯一的办法是让两件事中的一件是真实的:

  • 要么您已经围绕已经准备好处理此问题的代码包装了一个错误处理程序;
  • 或该实现足够聪明地认识到它正在其关闭端口错误处理程序中获取关闭端口错误,然后以某种聪明的方式放弃。

基本上,一旦OS级别的标准输入消失了,任何需要从它获取输入的东西都是注定的:如果没有操作系统级的操作,就不能将它放回去。

然而,实现可能将单个OS级I/O流映射到多语言级别的流,而关闭其中的一个流将给系统留下一些它仍然可以谈论的、仍然引用OS级标准输入的最后流。公共Lisp是一个系统的例子,它可以(取决于配置)来实现这一点。例如,它有*standard-input* *error-output**query-io**terminal-io*和其他流,而且很有可能出现这样的情况,例如,*standard-input*已经关闭,导致读取错误,但是*query-io*仍然指向某个位置,它的末尾有一个人。

我不知道scm是否会这么做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67282391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档