在以下情况会发生这个错误:尝试向一个当前被内核执行的文件写入内容 ,或者执行一个当前已经以写入模式打开的文件 。
例如
$ cp /bin/cat example $ ./example & [1 ? 17238 [1 ?+ Stopped ./example $ echo foo >example bash: example: Text file busy
注意,虽然你不能覆盖那个文件,但是你可以删除它
$ rm example
然后再替换它
$ cp /bin/kill ./example
你可以这么做,是因为,内核不会释放这个程序使用的磁盘空间 ,除非对它的最后一个使用也释放咯它 ,也就是说 :这个程序退出咯 。如果机器崩溃咯 ,而没有机会释放这些东西的话 ,在重启的时候 ,fsck通常会抱怨“已删除的inode 的dtime 为 0 ” ("deleted inode has zero dtime")(inode 已经被删除,但是没有被释放 ,因为在程序崩溃的时候 它仍然在使用当中)。Unix可以做到这一点,因为它使用文件的inode 号来引用文件 ,而那个东西可以拥有0 个或者更多的文件名 。打开一个文件然后删除它 (并且保持它的文件把柄 (filehandle) )是一个使用临时文件的普遍做法 ,因为你知道 ,当你的程序退出时 ,它会被系统从磁盘上删除。注意, 微软的Windows不能做到这一点,因为它使用文件名来引用文件。所以 ,在Windows 系统中,你无法删除一个正在使用的文件。
HxLauncher: Launch Android applications by voice commands