It's not so much that the filehand is left open when the exit event happens. Usually when the lockfiles are created the script simply writes its pid to the file and closes the filehandle to flush the file. Then when the script exists, the lockfile is deleted. However, if an unexpected exit happens, then the lockfile will still be around.