> By "sqlite3 binary", do you mean the sqlite3 command-line shell? Yes > It seems to me that any library that is unable to deal with an abrupt process termination (such as from exit(1)) is broken. How does Ceph deal with a SIGKILL? Why should exit() work any differently than SIGKILL? Ceph deals with SIGKILL the same way it would for a network partition, eventually the process' session may be blocklisted. exit() would be the same if it were _exit(). "Normal" process termination should not necessarily mean leave behind a mess (as with "abnormal" termination). > I think that application programs, such as the sqlite3 command-line shell, should be free to invoke exit() or abort() whenever appropriate without having to worry about library cleanup. Cleanup on process termination should be the responsibility of the library itself, or the operating system, not the application. Isn't that the whole point of the process abstraction in the first place? I've made an adjustment which turns out a little easier than expected: https://github.com/ceph/ceph/pull/42035/commits/ba32d871ce2a14a6430170702716f2482d3958fd It's possible we could have atexit handlers for Ceph library processes. I think that may be an acceptable and workable solution. So please consider the bug "withdrawn".