在Unix中生成“文本文件忙”的消息是什么?
什么操作产生错误“文本文件忙”? 我无法确切地说。
我认为这与我正在创build一个临时python脚本(使用tempfile)并使用execl的事实有关,但我认为execl会更改正在运行的文件。
此错误意味着其他进程或用户正在访问您的文件。 使用lsof
来检查其他进程正在使用它。 你可以使用kill
命令来杀死它,如果需要的话。
自从我看到这个信息以来,我们已经有一段时间了,但是它曾经在系统V R3或者几十年前stream行起来。 那当时,这意味着你不能在程序运行的时候改变程序的可执行文件。
例如,我正在make
一个名叫rmk
,过了一段时间就自我维护了。 我会运行开发版本,并build立一个新的版本。 为了得到它的工作,有必要使用解决方法:
gcc -g -Wall -o rmk1 main.o -L. -lrmk -L/Users/jleffler/lib/64 -ljl if [ -f rmk ] ; then mv rmk rmk2 ; else true; fi ; mv rmk1 rmk
因此,为了避免“文本文件繁忙”的问题,构build创build了一个新的文件rmk1
,然后将旧的rmk
移动到rmk2
(重命名不是一个问题;取消链接),然后将新build的rmk1
移到rmk
。
我还没有看到现代系统的错误,但是我并不是经常有程序重build自己。
不知道原因,但我可以提供一个快速和简单的工作。
在“cat> shScript.sh”(paste,^ Z)之后,我在CentOS 6上遇到了这种奇怪的现象,然后在KWrite中编辑这个文件。 奇怪的是没有可执行脚本的实例(ps -ef)。
我的快速工作只是“cp shScript.sh shScript2.sh”然后我能够执行shScript2.sh。 然后我删除了两个。 完成!
您可能会发现这在CIFS / SMBnetworking共享上更为常见。 Windows不允许在其他文件打开的情况下写入文件,即使该服务不是Windows(可能是其他某种NAS产品),也可能会重现相同的行为。 潜在地,它也可能是一些与locking/复制密切相关的底层NAS问题的performance。
我的经验之一:
我总是通过逆向工程来更改Chrome的默认键盘快捷键。 修改后,我忘记closuresChrome并运行以下内容:
sudo cp chrome /opt/google/chrome/chrome cp: cannot create regular file '/opt/google/chrome/chrome': Text file busy
使用strace,你可以find更多的细节:
sudo strace cp ./chrome /opt/google/chrome/chrome 2>&1 |grep 'Text file busy' open("/opt/google/chrome/chrome", O_WRONLY|O_TRUNC) = -1 ETXTBSY (Text file busy)
当您尝试写入当前正在由内核执行的文件或执行当前打开的文件以进行写入时,会发生这种情况。
资料来源: http : //wiki.wlug.org.nz/ETXTBSY
我在PHP中使用fopen()
时遇到了这个问题,然后试图在使用fclose()
之前unlink()
。
不好:
$handle = fopen('file.txt'); // do something unlink('file.txt');
好:
$handle = fopen('file.txt'); // do something fclose($handle); unlink('file.txt');
如果试图在Linux phpredis
上构buildphpredis
,则可能需要花时间在运行文件之前使用sleep
命令完成修改文件权限:
chmod a+x /usr/bin/php/scripts/phpize \ && sleep 1 \ && /usr/bin/php/scripts/phpize
在我的情况下,我试图在csh环境中执行一个shell文件(扩展名为.sh),并且得到了这个错误信息。
只是与bash运行它为我工作。 例如
bash file.sh