一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Linux|Centos|Ubuntu|系統進程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務器之家 - 服務器系統 - Linux - linux使用cp報錯 Text file busy

linux使用cp報錯 Text file busy

2019-11-15 17:13linux教程網 Linux

有同事問到我:使用cp命令時,如果發現要被覆蓋的文件(二進制可執行文件)正在運行,cp會報錯,cp命令是怎么知道該文件正在執行的?

我第一個想到的是:可能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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: chinaese中国女人厕所小便 | 色综合久久日韩国产 | 卫生间被教官做好爽HH视频 | 国产精品免费小视频 | 四虎影院观看 | 水岛津实在线 | 不良小说| 国产女乱淫真高清免费视频 | 色综合视频在线观看 | 国产精品国色综合久久 | 国产精品国产香蕉在线观看网 | 欧美午夜视频一区二区 | 勾搭已婚高h | 亚洲成年网站在线777 | 青草香蕉精品视频在线观看 | 成年看片免费高清观看 | 91素人约啪 | free性泰国娇小videos | 色老板成人永久免费视频 | 成年人免费在线视频 | 久久国产乱子伦免费精品 | 91大神在线观看精品一区 | 99久久精品国产一区二区 | 免费亚洲视频 | 亚洲免费网站在线观看 | 久久综合亚洲色hezyo | 女仆掀起蕾丝裙被打屁股作文 | 日韩亚洲一区中文字幕在线 | 日韩成人精品在线 | x8x8国产在线观看2021 | 国产成人精品视频一区二区不卡 | 99re热这里只有精品 | 天美传媒tm0065 | 日本高清色视影www日本 | 99 久久99久久精品免观看 | 日本一区二区视频在线 | 青青草原手机在线视频 | 亚洲高清中文字幕 | 免费看一级大片 | 1024免费观看完整版在线播放 | 娇妻被老外疯狂调教 |