• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    linux使用cp报错 Text file busy

    我第一个想到的是:可能ioctl可以检查文件。可惜我猜错了,看了一下cp的源码,原来如果一个文件正在运行,另一个进程再open以获得写权限的话,这个open本身就会失败,返回-1,errno为ETXTBSY。

    那么cp -f 为什么又可以?因为cp -f会先把目标文件(要被覆盖的文件)删掉,然后将源文件rename为目标文件名。

    从内核代码看,当运行一个二进制文件时

    sys_execve()

      do_execve()

        open_exec()

          deny_write_access()

    这里的deny_write_access会把文件对应inode的i_writecount成员减1,通常i_writecount的值就变成-1了(初始为0)

    这时候再有进程想以写模式open:

    do_sys_open()

      do_filp_open()

        path_openat()

          do_last()

            nameidata_to_filp()

              __dentry_open()

                __get_file_write_access()

                  get_write_access()

    get_write_access会发现inode的i_writecount成员为负数了,所以直接返回 -ETXTBSY

    上一篇:Linux下执行程序出现 Text file busy 提示时的解决方法
    下一篇:linux系统启动weblogic受管服务器报unable to get file lock, will ret_daring的解决
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    linux使用cp报错 Text file busy linux,使用,报错,Text,file,