]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
manager: check that supervisord is manager's parent process docs-supervisord-amfeuz/deployments/8078
authorVladimír Čunát <vladimir.cunat@nic.cz>
Fri, 5 Dec 2025 11:18:19 +0000 (12:18 +0100)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Fri, 5 Dec 2025 11:28:01 +0000 (12:28 +0100)
It might happen that we have a stale PID file, e.g. after a crash,
but some other process has taken the freed PID already.

python/knot_resolver/controller/supervisord/__init__.py

index 216186c50d8d9c01c41ecf16823e27c146c60a03..06fa791dfe67e5c872c98c9c96bbee6e377d6141 100644 (file)
@@ -1,5 +1,5 @@
 import logging
-from os import kill  # pylint: disable=[no-name-in-module]
+from os import kill, getppid  # pylint: disable=[no-name-in-module]
 from pathlib import Path
 from typing import Any, Dict, Iterable, NoReturn, Optional, Union, cast
 from xmlrpc.client import Fault, ServerProxy
@@ -112,7 +112,7 @@ async def _is_supervisord_running(config: KresConfig) -> bool:
     pid = await _get_supervisord_pid(config)
     if pid is None:
         return False
-    if not _is_process_runinng(pid):
+    if not _is_process_runinng(pid) or getppid() != pid:
         supervisord_pid_file(config).unlink()
         return False
     return True