`

在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脚本中怎么关闭文件描述符的实例

    主要介绍了Linux 在Bash脚本中怎么关闭文件描述符的实例的相关资料,希望通过本文能帮助到大家实现这样的功能,需要的朋友可以参考下

    Shell脚本学习笔记

    4.5.5 关闭文件描述符 92 4.5.6列出开发文件描述符 92 4.5.7禁止命令输出 94 4.6 使用临时文件 94 4.6.1 创建本地临时文件 94 4.6.2 在/temp中创建临时文件 95 4.6.3 创建临时目录 96 4.6.4 记录消息 96 第5章 脚本...

    Shell脚本专家指南

    9.4 从shell中访问描述符 第10章 管道输入读 10.1 逐行选项1 10.2 逐行选项2 10.3 逐行选项3 10.4 逐行选项4 10.5 直接管道读 10.6 逐字处理输入 第2部分 系统交互与高级技术 第11章 shell中的数学 11.1 expr 11.2 ...

    matlab高斯金字塔代码-MORB:本地要素MORB的官方存储库,MORB是基于ORB的多尺度二进制描述符,可在尺度变化时提高特征匹配的准确

    可以使用提供的Bash脚本将软件编译并安装在Linux计算机上,例如,运行Ubuntu 18.04。 该脚本使用CMake编译文件。 该文件应根据本地计算机配置进行适当更改。 例如,您可能要更改OpenCV安装路径。 打开终端(例如,...

    Linux BASH多进程并行处理的方法实现

    &gt;”$tmp_fifofile” # 定义文件描述符6指向这个fifo管道文件 rm $tmp_fifofile for ((i=0;i&lt;$SEND_THREAD_NUM;i++));do echo # for循环 往 fifo管道文件中写入13个空行 done &gt;&6 for i in `seq 100`;do # 100 次 ...

    sham:模拟bash风格的shell,在unix风格的OS上进行编码

    假 sham是一个命令外壳程序,可在MeNicks (模拟的Unix风格的OS)上运行。 要构建,测试和运行,请输入stack run 。...重定向到文件/描述符/从文件/描述符重定向:&lt;输入&gt;&gt; foo 2&gt;&1 管道(|) 背景

    Bash新手指南

    第一章 Bash 和 Bash 脚本 .................................................................................................2 1.1.普通 shell 程序............................................................

    下采样matlab代码-csd_lmnn:结合光谱描述符和LMNN进行非刚性3D形状检索

    csd_lmnn是一个软件包,用于使用众所周知的点描述符(例如,热核签名和波核签名和度量学习),特别是大余量最近邻居算法,学习3D非刚性形状的最佳形状描述符。 它可用于形状分类,形状相似性排名和形状检索。 此存储...

    边干边学Linux__第二版_doc格式

    6.8 使用文件描述符 6.9 输入和输出重定向的组合使用 6.10 管道(pipe) 第7章 C语言开发工具 7.1 编写程序的工具 7.2 编C语言程序 7.3 make工具 7.4 gdb调试工具 第8章 Bourn Again Shell编程 8.1 bash脚本的建立...

    Shell脚本模拟多线程功能分享

    代码如下: #!/bin/bash function pinghost { ping $1 -c 1 -w 10 |grep rtt|cut...&gt;$tmp_fifofile # 定义文件描述符6指向这个fifo管道文件 rm $tmp_fifofile thread=10 for ((i=0;i&lt;$thread;i++));do # for循环 往

    ARM_Linux启动分析.pdf

    创建内存文件描述符表("filp_cache",file_table_init()) 检查体系结构漏洞(对于alpha,此函数为空,check_bugs()) SMP机器其余CPU(除当前引导CPU)初始化(对于没有配置SMP的内核,此函数为空,smp_init())...

    浅析Linux之bash反弹shell原理

    反弹shell往往是在攻击者无法直接连接受害者的情况下进行的操作,原因有很多,例如目标是局域网,或者开启防火墙的某些策略等情况,而这时,我们就可以让受害者主动向攻击者发起连接,被控端发起请求到控制端某端口...

    入门学习Linux常用必会60个命令实例详解doc/txt

    要访问CD-ROM上的文件,需要将CD-ROM设备挂装在文件树中的某个挂装点。如果发行版安装了自动挂装包,那么这个步骤可自动进行。在Linux中,如果要使用硬盘、光驱等储存设备,就得先将它加载,当储存设备挂上了之后,...

    CSCI442-Project2-Shell:操作系统项目2

    通过实现支持管道,文件输入,文件输出和文件追加的外壳,熟悉与文件系统上的文件和管道相关联的UNIX文件描述符。 通过从事大型项目来提高系统编程技能。 这是您要了解的重要截止日期: 可交付成果 到期日 交付...

    holberton-system_engineering-devops

    欢迎来到holberton-system_engineering-devops 该存储库包含我与系统工程和Devops相关的所有Holberton项目内容。... 位于项目文件夹根目录的README.md文件,描述每个脚本在做什么 您的所有文件都必须是可执行文件

    matlab坐标正算代码-Lab-exercise-4:实验室作业分配库4

    您可以首先在文件夹中创建一个文件夹来存储本周练习的文件。 $ cd Desktop $ mkdir Lab-4 $ cd Lab-4 提醒:上面的$符号表示“终端”窗口中的命令提示符。 2.现在,您可以打开Spyder 。 ```bash $ spyder ``` 现在...

    RED HAT LINUX 6大全

    12.5 在/etc/passwd文件中使用NISisms 232 12.6 使用网络组 232 12.7 解决问题的一些技巧 233 12.8 小结 233 第13章 网络文件系统 235 13.1 NFS安装 235 13.2 启动和停止NFS守护程序 236 13.3 NFS状态 236 13.4 配置...

    DLSCORE:DLSCORE

    DLSCORE是神经网络的集成体,使用BINding ANAlyzer(BINANA)描述符对精炼的PDBBind数据(v2016)的最新版本进行了培训。 安装 虚拟环境 安装MglTools( )。 确保pythonsh命令在终端中有效 安装virtualenv: bash ...

Global site tag (gtag.js) - Google Analytics