linux使用cp報錯 Text file busy

我第一個想到的是:可能ioctl可以檢查文件??上也洛e了,看了一下cp的源碼,原來如果一個文件正在運行,另一個進程再open以獲得寫權(quán)限的話,這個open本身就會失敗,返回-1,errno為ETXTBSY。
那么cp -f 為什么又可以?因為cp -f會先把目標文件(要被覆蓋的文件)刪掉,然后將源文件rename為目標文件名。
從內(nèi)核代碼看,當(dāng)運行一個二進制文件時
sys_execve()
do_execve()
open_exec()
deny_write_access()
這里的deny_write_access會把文件對應(yīng)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會發(fā)現(xiàn)inode的i_writecount成員為負數(shù)了,所以直接返回 -ETXTBSY
相關(guān)文章
Linux下執(zhí)行程序出現(xiàn) Text file busy 提示時的解決方法
最近在用linux執(zhí)行命令的時候提示Text file busy,百度了一下發(fā)現(xiàn)原來通過fuser xxx 命令查看制定的文件被哪個進程占用,然后關(guān)閉該進程,則解決問題2014-04-12linux系統(tǒng)更新正在運行進程的可執(zhí)行文件需要注意的text file busy的原
這篇文章主要介紹了linux系統(tǒng)更新正在運行進程的可執(zhí)行文件需要注意的text file busy的原因及解決方案,需要的朋友可以參考下2014-04-12