进程打开文件进行写入时,使用vim打开文件进行写入导致fd文件描述符失效
2017-12-25 16:47
1121 查看
今天解决了一个困扰一上午的问题,进程打开文件进行写入时,使用vim打开文件进行写入导致fd文件描述符失效
https://www.douban.com/note/592324007/
使用sed -i 修改了一个日志文件后,tail -f 发现该文件不再有输出了,最后,无奈,reload了下进程才能重写。
1.进程打开日志文件,使用lsof -p pid
2.vim没打开文件前(或者打开vim没进行wq保存),进程打开的文件描述符的状态是
上图
3.当vim 修改文件后wq时,会提示
有个警告,提示文件在读期间被修改了,我们选择yes,
4.此时再使用lsof -p pid命令来查看打开的文件描述符
进程打开的文件描述符的状态变为了deleted状态.
vim打开一个文件背后发生了什么?swp交换文件是干什么用的?
在q时,会对swp文件做什么处理?
在wq时,会对swp文件做什么处理?
https://www.douban.com/note/592324007/
一、bug描述
dpi v5程序在运行一段时间过后,程序的server日志不生成了.使用sed -i 修改了一个日志文件后,tail -f 发现该文件不再有输出了,最后,无奈,reload了下进程才能重写。
二、做实验复现
下面来复现下现象:1.进程打开日志文件,使用lsof -p pid
2.vim没打开文件前(或者打开vim没进行wq保存),进程打开的文件描述符的状态是
上图
3.当vim 修改文件后wq时,会提示
有个警告,提示文件在读期间被修改了,我们选择yes,
4.此时再使用lsof -p pid命令来查看打开的文件描述符
进程打开的文件描述符的状态变为了deleted状态.
三、总结和复盘
原因可能是 sed -i 或者vim会新建一个文件,然后替换掉旧文件。进程里的打开的文件描述符还是老的文件描述符,但是已经没关联该新建立的文件,所以进程就不会往该文件里写内容。vim打开一个文件背后发生了什么?swp交换文件是干什么用的?
在q时,会对swp文件做什么处理?
在wq时,会对swp文件做什么处理?
相关文章推荐
- 使用supervisor 进行进程管理时调整最大文件打开数
- C# System.IO.FileStream 读取被其他程序打开的文件提示“文件正由另一进程使用,因此该进程无法访问该文件。”
- C# 使用WINAPI 进行读取写入配置文件
- linux下使用vim打开文件乱码问题解决方案
- lsof 查看进程打开那些文件 和 查看文件给那个进程使用
- linux命令 — lsof 查看进程打开那些文件 或者 查看文件给那个进程使用
- C#使用WINAPI进行读取写入配置文件_C#【编程联盟】
- C# System.IO.FileStream 读取被其他程序打开的文件提示“文件正由另一进程使用,因此该进程无法访问该文件。”
- linux 查看进程使用(打开)的文件
- 使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符
- 查看进程打开了哪些文件,查看进程使用了哪些端口,查看端口被哪个进程使用…………
- 使用Unicode字符集时用CFile把中文写入txt文件再用记事本打开出现乱码的问题
- ArrayList 与HashSet的比较,及应用反射读取properties配置文件中的数据进行实例化再调用,以及类加载器的使用;还有HashCode的分析,及导致内存泄露,内存溢出的原因之一
- java中使用JXL对Excel文件进行数据的写入、导出操作
- Visual Assist X尽量避免在非英文目录下使用,否则可能由于文件路径不能识别而导致不能进行提示
- 【转】使用SecureCRT对Linux vim进行颜色设置【可用的.vimrc文件内容】
- vimdiff使用笔记-如何在打开的文件之间跳转
- C# System.IO.FileStream 读取被其他程序打开的文件提示“文件正由另一进程使用,因此该进程无法访问该文件。”
- 创建文本后,写入文本,报“正由另一进程使用,因此该进程无法访问该文件”
- 使用vim编辑和打开多个文件