diff options
author | Christian Breunig <christian@breunig.cc> | 2023-05-28 21:14:42 +0200 |
---|---|---|
committer | Viacheslav Hletenko <v.gletenko@vyos.io> | 2023-08-01 11:14:02 +0000 |
commit | 58a20e42087cbb7a1b3b4725fa40fd15a31bb4ed (patch) | |
tree | e9e68c32e45f39c3ac425aac49500432d1a3cf95 /python | |
parent | e27f566f0f6506126c071381af001c45253186e2 (diff) | |
download | vyos-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.py | 12 |
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 |