summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2023-05-28 21:14:42 +0200
committerViacheslav Hletenko <v.gletenko@vyos.io>2023-08-01 11:14:02 +0000
commit58a20e42087cbb7a1b3b4725fa40fd15a31bb4ed (patch)
treee9e68c32e45f39c3ac425aac49500432d1a3cf95 /python
parente27f566f0f6506126c071381af001c45253186e2 (diff)
downloadvyos-1x-58a20e42087cbb7a1b3b4725fa40fd15a31bb4ed.tar.gz
vyos-1x-58a20e42087cbb7a1b3b4725fa40fd15a31bb4ed.zip
vyos.util: extend process_named_running() signature with cmdline
process_named_running() was introduced in commit 16b2fc8fc4ca ("dns-forwarding: T2298: fix path to control file") and thus remained more or less unchanged. Smoketests use process_named_running() heavily and might spawn multiple processes with the same name but ifferent options (e.g. dhcp6c or dhclient) and it was yet not possible to properly filter on the "real-deal" like the process bound to a given interface. One can now optionally specify a string that is searched inside the command line argument list of the process. Example: >>> process_named_running('dhcp6c', 'veth0') ['/usr/sbin/dhcp6c', '-D', '-k', '/run/dhcp6c/dhcp6c.veth0.sock', '-c', '/run/dhcp6c/dhcp6c.veth0.conf', '-p', '/run/dhcp6c/dhcp6c.veth0.pid', 'veth0'] 4215 >>> process_named_running('dhcp6c', 'veth1') ['/usr/sbin/dhcp6c', '-D', '-k', '/run/dhcp6c/dhcp6c.veth1.sock', '-c', '/run/dhcp6c/dhcp6c.veth1.conf', '-p', '/run/dhcp6c/dhcp6c.veth1.pid', 'veth1'] 4253 Where the debug list returned is the commandline searched. (cherry picked from commit 9c677c81be6a6e62958c73b038c2a36f1f629108)
Diffstat (limited to 'python')
-rw-r--r--python/vyos/util.py12
1 files changed, 7 insertions, 5 deletions
diff --git a/python/vyos/util.py b/python/vyos/util.py
index 32a5ae116..4df046a36 100644
--- a/python/vyos/util.py
+++ b/python/vyos/util.py
@@ -462,15 +462,17 @@ def process_running(pid_file):
pid = f.read().strip()
return pid_exists(int(pid))
-
-def process_named_running(name):
+def process_named_running(name, cmdline: str=None):
""" Checks if process with given name is running and returns its PID.
If Process is not running, return None
"""
from psutil import process_iter
- for p in process_iter():
- if name in p.name():
- return p.pid
+ for p in process_iter(['name', 'pid', 'cmdline']):
+ if cmdline:
+ if p.info['name'] == name and cmdline in p.info['cmdline']:
+ return p.info['pid']
+ elif p.info['name'] == name:
+ return p.info['pid']
return None