Home Assistant Unofficial Reference 2024.12.1
signal.py
Go to the documentation of this file.
1 """Signal handling related helpers."""
2 
3 import asyncio
4 import logging
5 import signal
6 
7 from homeassistant.const import RESTART_EXIT_CODE
8 from homeassistant.core import HomeAssistant, callback
9 from homeassistant.loader import bind_hass
10 from homeassistant.util.hass_dict import HassKey
11 
12 _LOGGER = logging.getLogger(__name__)
13 
14 KEY_HA_STOP: HassKey[asyncio.Task[None]] = HassKey("homeassistant_stop")
15 
16 
17 @callback
18 @bind_hass
19 def async_register_signal_handling(hass: HomeAssistant) -> None:
20  """Register system signal handler for core."""
21 
22  @callback
23  def async_signal_handle(exit_code: int) -> None:
24  """Wrap signal handling.
25 
26  * queue call to shutdown task
27  * re-instate default handler
28  """
29  hass.loop.remove_signal_handler(signal.SIGTERM)
30  hass.loop.remove_signal_handler(signal.SIGINT)
31  hass.data[KEY_HA_STOP] = asyncio.create_task(hass.async_stop(exit_code))
32 
33  try:
34  hass.loop.add_signal_handler(signal.SIGTERM, async_signal_handle, 0)
35  except ValueError:
36  _LOGGER.warning("Could not bind to SIGTERM")
37 
38  try:
39  hass.loop.add_signal_handler(signal.SIGINT, async_signal_handle, 0)
40  except ValueError:
41  _LOGGER.warning("Could not bind to SIGINT")
42 
43  try:
44  hass.loop.add_signal_handler(
45  signal.SIGHUP, async_signal_handle, RESTART_EXIT_CODE
46  )
47  except ValueError:
48  _LOGGER.warning("Could not bind to SIGHUP")
None async_register_signal_handling(HomeAssistant hass)
Definition: signal.py:19