命令:exec echo"这是用于测试" >测试; shell如何安排输出重定向?

时间:2016-02-14 17:22:39

标签: unix exec

我试图理解,对于上面的命令,当与shell本身相关联的进程被echo的替换时,shell如何安排输出重定向?非常感谢任何帮助。

此致 Rupam

1 个答案:

答案 0 :(得分:0)

外部命令的输出重定向是通过操作文件描述符来实现的,文件描述符通常涉及dup2,这是一个将文件描述符分配给现有打开文件的系统调用。在这种情况下,指示执行echo的进程的标准输出指向目标输出文件。

shell完全等同于以下步骤:

  1. 通过调用fork()创建当前流程的副本;后续步骤发生在子进程中。 (当使用exec调用命令时,将省略此步骤,如您的示例所示。)
  2. 打开test进行编写并记住文件描述符
  3. 通过调用dup2(fd, 1)
  4. 使文件描述符1等于描述符
  5. 调用execlp或类似内容,以执行echo
  6. 替换当前流程执行

    echo命令只是写入标准输出,文件描述符编号为1的花哨名称。如果最终写入TTY,文件或其他程序,它并不在意。上述步骤确保文件描述符1确实指向打开的文件test