mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2026-02-02 02:51:53 +08:00
cleanup: refactoring, using psutil
This commit is contained in:
1
PKGBUILD
1
PKGBUILD
@@ -37,7 +37,6 @@ depends=(
|
|||||||
python-dbus
|
python-dbus
|
||||||
python-pygments
|
python-pygments
|
||||||
python-pyghmi
|
python-pyghmi
|
||||||
psmisc
|
|
||||||
v4l-utils
|
v4l-utils
|
||||||
nginx-mainline
|
nginx-mainline
|
||||||
openssl
|
openssl
|
||||||
|
|||||||
@@ -21,33 +21,27 @@
|
|||||||
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import signal
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from typing import List
|
from typing import List
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
import psutil
|
||||||
|
|
||||||
from ...logging import get_logger
|
from ...logging import get_logger
|
||||||
|
|
||||||
|
from ...yamlconf import Section
|
||||||
|
|
||||||
from ... import gpio
|
from ... import gpio
|
||||||
|
|
||||||
from .. import init
|
from .. import init
|
||||||
|
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
def main(argv: Optional[List[str]]=None) -> None:
|
def _clear_gpio(config: Section) -> None:
|
||||||
config = init(
|
|
||||||
prog="kvmd-cleanup",
|
|
||||||
description="Kill KVMD and clear resources",
|
|
||||||
argv=argv,
|
|
||||||
load_hid=True,
|
|
||||||
load_atx=True,
|
|
||||||
load_msd=True,
|
|
||||||
)[2].kvmd
|
|
||||||
|
|
||||||
logger = get_logger(0)
|
logger = get_logger(0)
|
||||||
|
|
||||||
logger.info("Cleaning up ...")
|
|
||||||
with gpio.bcm():
|
with gpio.bcm():
|
||||||
for (name, pin) in [
|
for (name, pin) in [
|
||||||
*([
|
*([
|
||||||
@@ -74,15 +68,30 @@ def main(argv: Optional[List[str]]=None) -> None:
|
|||||||
except Exception:
|
except Exception:
|
||||||
logger.exception("Can't clear GPIO pin=%d (%s)", pin, name)
|
logger.exception("Can't clear GPIO pin=%d (%s)", pin, name)
|
||||||
|
|
||||||
streamer = os.path.basename(config.streamer.cmd[0])
|
|
||||||
logger.info("Trying to find and kill %r ...", streamer)
|
|
||||||
try:
|
|
||||||
subprocess.check_output(["killall", streamer], stderr=subprocess.STDOUT)
|
|
||||||
time.sleep(3)
|
|
||||||
subprocess.check_output(["killall", "-9", streamer], stderr=subprocess.STDOUT)
|
|
||||||
except subprocess.CalledProcessError: # pragma: nocover
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
def _kill_streamer(config: Section) -> None:
|
||||||
|
logger = get_logger(0)
|
||||||
|
|
||||||
|
streamer = os.path.basename(config.streamer.cmd[0])
|
||||||
|
|
||||||
|
logger.info("Trying to find and kill %r ...", streamer)
|
||||||
|
for proc in psutil.process_iter():
|
||||||
|
attrs = proc.as_dict(attrs=["name"])
|
||||||
|
if os.path.basename(attrs.get("name", "")) == streamer:
|
||||||
|
try:
|
||||||
|
proc.send_signal(signal.SIGTERM)
|
||||||
|
except Exception:
|
||||||
|
logger.exception("Can't send SIGTERM to streamer with pid=%d", proc.pid)
|
||||||
|
time.sleep(3)
|
||||||
|
if proc.is_running():
|
||||||
|
try:
|
||||||
|
proc.send_signal(signal.SIGKILL)
|
||||||
|
except Exception:
|
||||||
|
logger.exception("Can't send SIGKILL to streamer with pid=%d", proc.pid)
|
||||||
|
|
||||||
|
|
||||||
|
def _remove_sockets(config: Section) -> None:
|
||||||
|
logger = get_logger(0)
|
||||||
for (owner, unix_path) in [
|
for (owner, unix_path) in [
|
||||||
("KVMD", config.server.unix),
|
("KVMD", config.server.unix),
|
||||||
("streamer", config.streamer.unix),
|
("streamer", config.streamer.unix),
|
||||||
@@ -94,4 +103,29 @@ def main(argv: Optional[List[str]]=None) -> None:
|
|||||||
except Exception: # pragma: nocover
|
except Exception: # pragma: nocover
|
||||||
logger.exception("Can't remove %s socket %r", owner, unix_path)
|
logger.exception("Can't remove %s socket %r", owner, unix_path)
|
||||||
|
|
||||||
|
|
||||||
|
# =====
|
||||||
|
def main(argv: Optional[List[str]]=None) -> None:
|
||||||
|
config = init(
|
||||||
|
prog="kvmd-cleanup",
|
||||||
|
description="Kill KVMD and clear resources",
|
||||||
|
argv=argv,
|
||||||
|
load_hid=True,
|
||||||
|
load_atx=True,
|
||||||
|
load_msd=True,
|
||||||
|
)[2].kvmd
|
||||||
|
|
||||||
|
logger = get_logger(0)
|
||||||
|
logger.info("Cleaning up ...")
|
||||||
|
|
||||||
|
for method in [
|
||||||
|
_clear_gpio,
|
||||||
|
_kill_streamer,
|
||||||
|
_remove_sockets,
|
||||||
|
]:
|
||||||
|
try:
|
||||||
|
method(config)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
logger.info("Bye-bye")
|
logger.info("Bye-bye")
|
||||||
|
|||||||
Reference in New Issue
Block a user