By "sqlite3 binary", do you mean the [sqlite3 command-line shell]? : https://www.sqlite.org/cli.html 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? 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?