Skip to main content

Safe Exit is a Python package that provides functionality to handle graceful process termination. The package allows users to register functions that will be called when the program exits.

Difference from atexit

Python has a standard module called atexit that does something similar, but atexit cannot handle cases where a program is killed by a signal not handled by Python.

Python only handles the SIGINT signal and does not handle SIGTERM, SIGQUIT, and SIGHUP signals. On Windows, programs can also be killed by SIGBREAK and CTRL_CLOSE_EVENT.

Safe Exit can handle all these signals:

  • On POSIX systems: SIGINT, SIGTERM, SIGQUIT, and SIGHUP

  • On Windows:

    • SIGINT, SIGTERM, SIGBREAK

    • CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, CTRL_SHUTDOWN_EVENT

Windows also has CTRL_C_EVENT and CTRL_BREAK_EVENT which Python translate to SIGINT and SIGBREAK signals, respectively. On windows, SIGTERM is implemented only for the current process, there is no way to send SIGTERM to other processes.

Installation

To install Safe Exit, simply run:

pip install safe-exit

Usage

Just register a cleanup function like you would with atexit:

import safe_exit

def cleanup_function():
    # Perform cleanup tasks

safe_exit.register(cleanup_function)

The register function can also be used as a decorator:

@safe_exit.register
def cleanup_function():
    # Perform cleanup tasks

Signal handling is configurable. Call the config function before registering functions. The following code configures safe_exit to handle SIGQUIT and SIGHUP signals:

from safe_exit import ConfigFlag, config, register
config(ConfigFlag.SIGQUIT | ConfigFlag.SIGHUP)

@register
def cleanup()
    print("clean up")

To nicely kill a process, giving it a chance to clean up:

process_id = ...
safe_exit.safe_kill(process_pid)

Contributing

Contributions to Safe Exit are welcome! If you would like to contribute or have any ideas for improvements, please feel free to open an issue on the project’s issue tracker or get in touch with the maintainer directly.

License

Safe Exit is released under the MIT License. See the LICENSE.txt file for more details.

Metadata

Release files for safe-exit 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for safe-exit 0.1.2
File Size Uploaded
safe-exit-0.1.2.tar.gz 7.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for safe-exit 0.1.2
File Interpreter ABI Platform
safe_exit-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 12.9 kB

Release files / safe-exit-0.1.2.tar.gz

Download URL safe-exit-0.1.2.tar.gz
Size 7.0 kB
Tags Source
SHA-256 checksum
How to use checksums
0cea8e9ffcbb8b98e3b449c272800491327e8823b90472973eafce0fed2feefe
BLAKE2b-256 checksum
How to use checksums
5dcad071c346f3f44658ce5da6c91e597e5c19c0c527f519addb07ddbe7cda26
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.8.7

Release files / safe_exit-0.1.2-py3-none-any.whl

Download URL safe_exit-0.1.2-py3-none-any.whl
Size 6.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3b522c8a540b967b5029e03ed81285707e606459a1b72b8adbbc80e2b18cb9da
BLAKE2b-256 checksum
How to use checksums
8e367be794ff9fea258c1c5dab15c2fdad40a3582f852b83eb433a4422e2be09
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.8.7

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page