来自 Linux 编程接口
在交互式 shell 中,这三个文件描述符 0、1 和 2 通常指的是运行 shell 的终端。
“运行 shell 的终端”是否是指交互式 shell 所属会话的控制终端?
如果是,如果 shell 的会话没有控制终端怎么办?
当从其父进程创建 shell 时,在以下每种情况下,shell 是否会自动在文件描述符 0、1 和 2 与终端之间创建连接(从 shell 的父进程继承):
如果“shell 运行所在的终端”或控制终端已在非 0、1 和 2 的文件描述符处打开?
如果文件描述符 0、1 和 2 已经连接到一个不是“运行 shell 的终端”或控制终端的文件?
- 如果引用中的 shell 是非交互式的怎么办?
谢谢。
顺便说一句,假设“shell”是 POSIX 或 bash。
答案1
不。
getty
这是通过的各种实现来完成的open-controlling-tty
、由 SSH 服务器的分叉 pty-slave-side 部分、由 GUI 终端仿真器的分叉 pty-slave-side 部分或类似的部分。
请注意引用的文字没有任何影响shell 会执行此操作。你根据凭空产生的错误前提提出了一大堆问题。
你知道它getty
是这样的,因为你在“登录引导的进程会话什么时候启动?”,与这个问题同时写的。
进一步阅读
- getty 和 Agetty 和有什么不一样?
- “askfirst” getty 与 systemd(“按 Enter 键激活此控制台”)
- 乔纳森·德博因·波拉德。 ”虚拟终端登录”。小吃指南。软件。
- 乔纳森·德博因·波拉德。 ”真实终端登录”。小吃指南。软件。