`

在Bash脚本中怎么关闭文件描述符?

阅读更多

在写一个Bash脚本的时候碰到一个问题,这个脚本是用来启动一个程序B的,而这个脚本又被另一个程序A调用,结果发现新启动的B进程中有很多A进 程打开的文件描述符(如Socket)。因此决定在脚本中将它们关闭,因为为了简单起见,我在A程序中使用了system()来启动该脚本。增加了关闭文 件描述符的脚本如下:

#!/bin/sh

cd $(dirname "$0") || exit 1

exec 3>&-
exec 4>&-



./rbtunnel "$@" &

#sleep 1


这里的关键点就是关闭文件描述的代码:exec fd>&-   也可以是:exec fd<&-  其中fd为文件描述符的数字,而文件描述符在Linux下可以通过lsof -c rbtunnel来查看。

 

  源文:http://www.vktone.com/articles/how-to-close-file-descriptor-on-bash.html

 

4
2
分享到:
评论
2 楼 bzhao 2018-08-24  
你也应该可以这样:(not tested)
./rbtunnel "$@"  3>&-  4>&- &
1 楼 bzhao 2017-08-28  
如果有A进程原代码情况下,通过如下调用,把他的子进程继承关闭则更加靠谱,因为fd的号有时候是变化的!

fcntl(fd, F_SETFD, flags | FD_CLOEXEC)

相关推荐

    Linux 在Bash脚本中怎么关闭文件描述符的实例

    总之,关闭文件描述符是Bash脚本中控制进程资源的重要手段。在编写复杂的脚本时,理解如何管理文件描述符可以帮助避免资源泄露,提高脚本的效率和安全性。在处理与外部进程交互,特别是涉及管道、重定向和子进程时,...

    Linux中高效编写Bash脚本的9个技巧

    在Bash脚本中,注释同样非常重要,尤其是在团队环境中或者当你未来需要回顾自己的代码时。注释可以通过`#`符号来添加,如: ```bash # 这是一条注释 ``` 好的习惯是在脚本的关键部分和复杂逻辑处添加注释,这样...

    Bash中文件描述符的详细介绍

    在Bash shell编程中,文件描述符是至...掌握文件描述符的使用,对于编写复杂的Bash脚本和高效管理Linux系统至关重要。通过熟练运用文件描述符,你可以更灵活地控制程序的输入输出,实现自动化任务和脚本的定制化需求。

    unix高级Bash脚本编程指南

    `dup2`可以关闭目标文件描述符并将其替换为源文件描述符的值。这使得我们能精确控制I/O流的方向,比如将标准输出重定向到某个文件,或者让两个进程共享同一管道。 举个例子,假设我们有一个脚本需要将输出重定向到...

    LinuxBash脚本编程大全

    文件操作则涉及读取、写入、重命名和删除文件,以及对文件描述符和重定向的运用,这些能力使得Bash脚本能有效管理系统资源。 此外,书中还会详细介绍Bash的内置命令,如`cd`用于切换目录,`echo`用于输出文本,`...

    高级Bash脚本编程指南

    在Bash脚本中,掌握以下几个核心知识点至关重要: 1. **基础语法**: 包括变量声明、赋值、字符串操作、条件语句(if-else)、循环结构(for、while)、函数定义等。了解这些基本元素是编写任何脚本的第一步。 2. *...

    linux脚本bash官方手册

    - **移动文件描述符**:更改文件描述符的位置,以允许更灵活的重定向选项。 - **打开文件描述符**:允许创建新的文件描述符。 综上所述,Bash提供了丰富的功能和语法结构,使得编写高效的脚本成为可能。理解这些...

    Linux Bash脚本编程大全

    - 文件描述符:理解和操作不同的文件描述符。 5. **进程控制** - 子shell:创建子进程,执行命令。 - 背景执行:使用`&`让命令在后台运行。 - 进程间通信:管道、重定向和命名管道。 6. **脚本调试** - 调试...

    高级bash脚本编程

    #### 描述:高级bash脚本编程,中文版,内含较多脚本,便于参考 - **高级bash脚本编程**:这表明书籍将深入探讨bash脚本的高级功能,适合已经掌握了基础bash脚本语法的读者进一步提升技能。 - **中文版**:书籍以...

    高级Bash脚本编程指南.rar

    本指南将深入探讨Bash脚本编程的高级技巧和概念,帮助你提升在Linux环境中的自动化任务处理能力。 ### 1. Bash基础 Bash脚本由一系列命令组成,每个命令之间用分号或换行符隔开。脚本以`#!/bin/bash`作为首行,...

    中文版高级Bash脚本编程指南

    文件描述符是系统用来识别打开文件的标识,除了默认的0(标准输入)、1(标准输出)、2(标准错误)外,还可以自定义更多描述符,进行复杂的I/O操作。 以上只是高级Bash脚本编程中的一部分关键知识点,实际的教程...

    Bash脚本编程基础共58页.pdf.zip

    【压缩包子文件的文件名称列表】中的"赚钱项目"可能意味着这个Bash脚本教程也可能涉及到了如何使用Bash脚本来实现自动化赚钱项目,如批量数据处理、网络监控、定时任务等实际应用场景。 在Bash脚本编程中,你需要...

    通过文件描述符恢复被误删除的文件(前提是文件正被某一个进程占用着,未被释放)

    在这个场景中,如果一个文件被误删除,但仍有进程持有着该文件的描述符,我们理论上可以利用这个描述符来恢复文件,因为文件在内存中的数据并没有被清除,只是其在文件系统上的链接被断开了。 首先,我们模拟了一个...

    高级bash脚本编程指南

    - 文件描述符的使用,例如`0`代表标准输入,`1`代表标准输出,`2`代表标准错误。 5. **进程控制** - `&`使命令在后台运行,`wait`命令等待后台进程结束。 - `jobs`查看当前会话中的后台进程,`fg`和`bg`将进程...

    高级Bash脚本编程指南.chm

    12. **I/O重定向和文件描述符**:除了标准输入(0)、标准输出(1)和标准错误(2),还可以自定义文件描述符进行I/O操作。 在《高级Bash脚本编程指南》中,作者会详细介绍这些概念,并通过实例讲解如何实际应用。...

    Bash 脚本教程 – 适合初学者的 Linux Shell 脚本和命令行.docx

    【描述】: 本文将介绍Bash脚本的基础知识,特别针对Linux Shell脚本编写和命令行操作,适合初学者学习。 【标签】: Bash, Shell脚本, Linux, 命令行, 初学者 【正文】: Bash(Bourne-Again SHell)是Unix和Linux...

Global site tag (gtag.js) - Google Analytics