linux更新文件
来源:互联网 发布:步惊云软件 编辑:程序博客网 时间:2024/06/06 00:08
最近发现很多同学不知道线上操作替换文件的要点。所以又整理了一下。
线上替换一个正在运行进程的文件时(包括二进制、动态库、需要读取的资源文件等)。应避免使用cp/scp操作。而需要使用mv/rsync作为替代。
原因:cp是将源文件截断然后写入新内容。也就是说正在打开这个文件的进程可以立刻感知到修改。修改文件内容很可能导致程序逻辑错误甚至崩溃。而mv则是标记”删除“老文件,然后放一个新的同名文件过去。也就是说老文件和新文件其实是两个不同文件(inode不同),只是名字一样而已。正在打开老文件的进程不会受到影响。如果进程使用了mmap打开某文件(比如载入so),如果目标文件被使用cp覆盖并且长度变小。那么读取差额部分的地址时(在新文件中其实已经不存在了),会导致SIGBUS信号。使进程崩溃。
至于可执行文件本身。倒是不怕cp导致崩溃。。因为cp时会报”text file busy"。压根cp不了。这时候也应该使用mv类操作。替换完成后重启进程。执行的就是新的可执行文件了。
线上替换一个正在运行进程的文件时(包括二进制、动态库、需要读取的资源文件等)。应避免使用cp/scp操作。而需要使用mv/rsync作为替代。
原因:cp是将源文件截断然后写入新内容。也就是说正在打开这个文件的进程可以立刻感知到修改。修改文件内容很可能导致程序逻辑错误甚至崩溃。而mv则是标记”删除“老文件,然后放一个新的同名文件过去。也就是说老文件和新文件其实是两个不同文件(inode不同),只是名字一样而已。正在打开老文件的进程不会受到影响。如果进程使用了mmap打开某文件(比如载入so),如果目标文件被使用cp覆盖并且长度变小。那么读取差额部分的地址时(在新文件中其实已经不存在了),会导致SIGBUS信号。使进程崩溃。
至于可执行文件本身。倒是不怕cp导致崩溃。。因为cp时会报”text file busy"。压根cp不了。这时候也应该使用mv类操作。替换完成后重启进程。执行的就是新的可执行文件了。
阅读全文
0 0
- linux更新文件
- 更新Linux内核头文件(linux headers)
- Linux命令更新系统时间,更新所有文件的时间
- Linux命令更新系统时间,更新所有文件的时间
- inotify+rsync实现Linux文件实时更新
- linux下头文件概述(不定期更新)
- Linux目录递归touch更新文件日期
- linux更新文件命令touch详解
- TFTP更新linux或android系统文件
- Linux定时增量更新文件--转
- linux 更新war中的某个文件
- Linux文件解压命令汇总(持续更新)
- Linux find查询最近更新访问过的文件
- 晒晒我的linux alias文件【不定期更新】
- linux更新zip包中的某一个(一些)文件
- 利用SVN快速更新[文件或新版本]至LINUX服务器
- Linux find查询最近更新访问过的文件
- linux下Makefile的学习之九(更新函数库文件)
- NSMutableArray的创建方法
- $.ajax()方法参数详解
- listview的优化
- delphi chrome cef3 控件学习笔记 (二)
- mnist机器入门进阶代码
- linux更新文件
- Alias: Potteryable precursor polymer
- Find The Multiple POJ
- spring boot 返回 html
- RestTemplate的简单实用
- Oracle游标全解
- Spring Boot 使用JSP时,修改JSP不生效,需要重启的现象
- delphi chrome cef3 控件学习笔记 (三)
- JavaWeb学习笔记——Servlet编程