当前位置:  开发笔记 > 编程语言 > 正文

在bash中理解exec

如何解决《在bash中理解exec》经验,为你挑选了1个好方法。

在阅读了关于exec builtin如何在bash中工作的解释之后,我理解它的基本功能是在不分叉的情况下替换当前进程.它似乎也用于在当前进程中重定向I/O和关闭文件描述符,这让我感到困惑.这是一些无关的额外的事情exec吗?能否在"取代现有流程"的背景下理解?如果与流程替换相结合,它是如何工作的,例如exec 3< <(my program)



1> that other g..:

这是做什么的exec:

    设置当前进程中的所有重定向.

    这是一个组合open,dup2以及close系统调用像大多数操作> foo

    pipe+ fork+ /dev/fd/*用于过程替代

    为here-documents和here-strings创建并打开临时文件

    将过程映像(使用execve)替换为指定的程序(如果有)

如果您没有指定要运行的程序,则只需跳过步骤2,因此所有重定向都会影响脚本的其余部分.

<(Process substitution)通过pipe+ fork+工作/dev/fd/:

    正常创建管道.

    将它复制到FD 63或某处不会妨碍它

    分叉并运行读取/写入管道的程序.

    将进程替换替换为/dev/fd/63一个特殊文件,该文件在打开时将返回FD 63.(试试echo <(ls))

从那时起,它就像从任何其他文件重定向一样.你打开/dev/fd/63FD 3阅读,然后你最终从管道读取.exec因此不需要做任何特别的事情.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有