gpt4 book ai didi

unix - stdin 和 stdout 是如何成为进程独有的?

转载 作者:行者123 更新时间:2023-12-05 00:56:25 31 4
gpt4 key购买 nike

Stdin 和 stdout 是由多个进程共享以接收用户输入的单个文件。那么操作系统如何确保只有特定程序的输入在程序的标准输入中可见?

最佳答案

您假设所有进程共享 stdin/stdout(虽然具有相同的逻辑名称)是 最好。
stdin/stdout是由启动给定进程的进程转发(或初始化)的打开文件的逻辑名称。实际上,使用标准的 fork-and-exec 模式,在调用 exec 之前,这些设置可能已经发生在新进程中(在 fork 之后)。
stdin/stdout通常只是从 parent 那里继承来的。所以,是的,存在共享 stdin 的进程组。和/或 stdout对于给定的文件节点。
此外,由于文件描述符可能是管道的一侧,因此您不需要将文件系统(或设备节点)中的文件链接到任何众所周知的标准 channel (您还应该将 stderr 包括在您的考虑中)。

正常的设置方法是:

  • 父级(例如您的 shell )正在调用 fork
  • fork 进程(子进程)正在设置环境、标准 I/O channel 和其他任何东西。
  • 然后 child 执行 exec将进程与要执行的目标图像重叠。

  • 设置时:它要么保留现有 channel ,要么用新 channel 替换它们,例如创建 pipe并适本地链接端点。 (老实说,在简化的描述中,创建管道需要在 fork 之前发生)

    这样,大部分进程都有自己的 I/O channel 。

    尽管如此,多个进程可能会写入它们所连接的 channel (具有有效的文件描述符)。当读取每个垃圾数据(通常是带有终端的行或带有文件的块)时,只能由一个读取器读取。因此,如果您有多个(正在运行)进程从终端读取为 stdin,则只有一个进程会读取您的输入,而其他进程则根本看不到此输入。

    关于unix - stdin 和 stdout 是如何成为进程独有的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36173249/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com