您现在的位置是:网站首页> 编程资料编程资料
linux系统更新正在运行进程的可执行文件需要注意的text file busy的原因及解决方法_LINUX_操作系统_
2024-02-12
142人已围观
简介 linux系统更新正在运行进程的可执行文件需要注意的text file busy的原因及解决方法_LINUX_操作系统_
最近发现很多同学不知道线上操作替换文件的要点。所以又整理了一下。
线上替换一个正在运行进程的文件时(包括二进制、动态库、需要读取的资源文件等)。应避免使用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类操作。替换完成后重启进程。执行的就是新的可执行文件了。
相关内容
- Broadcom网卡linux系统下无法连接到网络问题的解决办法 _LINUX_操作系统_
- linux系统启动weblogic受管服务器报unable to get file lock, will ret_daring的解决_LINUX_操作系统_
- linux查找可执行文件的方法_LINUX_操作系统_
- linux使用cp报错 Text file busy_LINUX_操作系统_
- linux修改系统时间和linux查看时区、修改时区的方法_LINUX_操作系统_
- 刀塔传奇7月魂匣狼人站位介绍_手机游戏_游戏攻略_
- 暖暖环游世界漂浮森林怎么搭配_漂浮森林S搭配推荐_手机游戏_游戏攻略_
- 天天酷跑英雄联萌系列拥有几个以上可以触发套装效果 正确答案介绍_手机游戏_游戏攻略_
- 刀塔传奇周年庆谜题第一弹答案介绍_手机游戏_游戏攻略_
- 刀塔传奇花木兰皮肤怎么得 花木兰皮肤获得方法介绍_手机游戏_游戏攻略_
