`

linux系统更新正在运行进程的可执行文件需要注意的text file busy的原因及解决方法【转】

 
阅读更多

转自:http://www.jb51.net/LINUXjishu/153060.html

 

最近发现很多同学不知道线上操作替换文件的要点。所以又整理了一下。 

线上替换一个正在运行进程的文件时(包括二进制、动态库、需要读取的资源文件等)。应避免使用cp/scp操作。而需要使用mv/rsync作为替代。 

原因:cp是将源文件截断然后写入新内容。也就是说正在打开这个文件的进程可以立刻感知到修改。修改文件内容很可能导致程序逻辑错误甚至崩溃。而mv则是标记”删除“老文件,然后放一个新的同名文件过去。也就是说老文件和新文件其实是两个不同文件(inode不同),只是名字一样而已。正在打开老文件的进程不会受到影响。如果进程使用了mmap打开某文件(比如载入so),如果目标文件被使用cp覆盖并且长度变小。那么读取差额部分的地址时(在新文件中其实已经不存在了),会导致SIGBUS信号。使进程崩溃。 

至于可执行文件本身。倒是不怕cp导致崩溃。。因为cp时会报”text file busy"。压根cp不了。这时候也应该使用mv类操作。替换完成后重启进程。执行的就是新的可执行文件了。

分享到:
评论

相关推荐

    swap区增加

    4. **监控中心策略**:为了更好地监控系统的运行状态,可以增加更多的监控策略,如CPU使用率、磁盘I/O、网络流量等关键指标的实时监控,并设定阈值报警机制,以便及时发现并解决问题。 通过以上步骤和技术点的学习...

    Linux操作系统错误代码解释 (中英文对照).pdf

    可能是文件格式不正确或不是有效的可执行文件。 **10. OS error code 9: Bad file descriptor** - **中文解释**:坏的文件描述符 - **描述**:当提供的文件描述符无效或已被关闭时返回此错误。检查所有打开的文件...

    Linux下errno.h文件错误号说明.docx

    * ENOEXEC (8):Exec format error,表示可执行文件格式错误。 * EBADF (9):Bad file number,表示文件描述符无效。 * ECHILD (10):No child processes,表示没有子进程。 * EAGAIN (11):Try again,表示需要重新...

    Linux操作系统错误代码解释-(中英文对照)

    - 表示试图执行一个不可执行的文件,或者文件的格式与当前系统架构不兼容。 10. **OS error code 9: Bad file descriptor** - **操作系统错误代码9:坏的文件描述符** - 文件描述符通常用于表示打开的文件或套接...

    Linux系统调用出错errno描述一览

    这通常发生在尝试执行一个不可执行的文件时。 #### 9 EBADF -- Bad file descriptor 无效的文件描述符。这通常发生在使用一个已经关闭或不存在的文件描述符时。 #### 10 ECHILD -- No child processes 没有子进程...

    linux命令返回值的含义解析

    26. OS error code 26: Text file busy - 文本文件正忙,可能被其他进程打开。 27. OS error code 27: File too large - 文件大小超过系统或文件系统限制。 28. OS error code 28: No space left on device - 设备...

    Nginx+Tomcat负载均衡

    从网上查了好多资料,多走了很多弯路,现在把自己成功的方法拿出来与大家分享。 Window7 我是在Win7上做的。不是什么Linux,网上好多资料,特别麻烦。 Nginx Nginx 比较好找到,直接去网上下载 网址: ...

Global site tag (gtag.js) - Google Analytics