Paul Richards wrote:
Overwriting a file that's currently executing results in a "Text file
busy" error.

I guess there are folks around who don't know this:


When you execute a program, the program is not simply copied
into memory.  Instead, the kernel keeps the file open and pages the
executable in as necessary.  This is called "demand-paging of
executables" and it's an old performance optimization that
improves VM operation (executable code never needs to be copied
out to swap; it can just be dumped and paged back in later) and
quickens application startup (only the immediately-required
parts of the application are read into memory immediately).
I'm not certain, but I suspect it first appeared in Unix in
the mid-1970s.

In essence, the file _is_ the executable contents of memory.
Overwriting it is almost always a bad idea; if the
system has to swap in another part of that executable,
the program is almost certain to crash.

This was something that was fixed way back on FreeBSD but it seems to be
a problem again.

Depends on how you're installing the binary. It has always been safe to do either of the following: * Rename the current executable and then install the new one. * Unlink the current executable and then install the new one. Many tools that claim to "overwrite" really do the latter, which causes a certain amount of understandable confusion. (I'm pretty sure "install" does unlink/copy by default and will do rename/copy if you specify -b.)

True overwriting of in-use executable files (e.g., "cat new > old")
is dangerous and should be prohibited.

Tim

P.S. I wonder if demand-paging of executables is still a win for
program startup on modern systems with dynamically-linked executables?
Large reads are a lot more efficient, and it seems that dynamic
linking might cause more startup thrashing.  Hmmm...

_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to