Blender Add-on Dev: Unregister is never called on Blender Exit? In my add-on __init__.py file, I have a function defined def unregister(): which unregisters all other modules. But when I exit Blender normally (Windows 10, X button), this function is never called.

Edit Note: This is normal behavior - see answer

Is there something that needs to be done before Blender executes unregister() on exit? Or perhaps some error in my add-on may be causing this behavior? I get no warnings or errors. Only two lines print out on exit:

Saved session recovery to 'C:\Users\Moats\AppData\Local\Temp\quit.blend'
Blender quit


Maybe this is normal? Blender is saying - its over, so it doesn't matter? One other unlikely possibility is that print() doesn't function after a certain exit point. I can probably confirm this, but not easily.

If anyone knows what might be happening, or can confirm that their own unregister() is being called on exit, I'd really appreciate it.
The unregister() function is only called when you deactivate the add-on in your preferences, while register() is always called when Blender starts in case the add-on is activated in the preferences. You can test this with the following simple add-on that writes into a text file whenever one of the functions is executed. The example also includes how to add a handler that is triggered when Blender is exiting.

This add-on tries to write the test file into Blender's install directory. If that directory requires special permissions, then you should adjust the path to somewhere it can write the file to.

bl_info = {
    "name": "Register and unregister test",
    "author": "Robert Guetzkow",
    "version": (1, 0),
    "blender": (2, 80, 0),
    "location": "Dummy panel in View3D",
    "description": "Check when register and unregister are called",
    "warning": "",
    "wiki_url": "",
    "category": "3D View"}

import bpy
import atexit


class EXAMPLE_PT_panel(bpy.types.Panel):
    bl_label = "My own addon"
    bl_category = "Name of your tab"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"

    def draw(self, context):
        layout = self.layout
        layout.label(text="This is a label")


classes = (EXAMPLE_PT_panel,)


def exit_handler():
    with open("test.txt", "a") as myfile:
        myfile.write("exiting\n")

def register():
    for cls in classes:
        bpy.utils.register_class(cls)
    with open("test.txt", "a") as myfile:
        myfile.write("register\n")
    atexit.register(exit_handler)


def unregister():
    for cls in classes:
        bpy.utils.unregister_class(cls)
    with open("test.txt", "a") as myfile:
        myfile.write("unregister\n")


if __name__ == "__main__":
    register()