From 36c52cca2bb56f4107a5234ba190031b906c593e Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Tue, 27 Oct 2020 09:25:35 +0800 Subject: [PATCH] Fix 'NoSuchProcess' exception in process_checker (#5716) The psutil library used in process_checker create a cache for each process when calling process_iter. So, there is some possibility that one process exists when calling process_iter, but not exists when calling cmdline, which will raise a NoSuchProcess exception. This commit fix the issue. Signed-off-by: bingwang --- files/image_config/monit/process_checker | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/files/image_config/monit/process_checker b/files/image_config/monit/process_checker index ba48e37729aa..e2846fae9f93 100755 --- a/files/image_config/monit/process_checker +++ b/files/image_config/monit/process_checker @@ -28,9 +28,12 @@ def check_process_existence(container_name, process_cmdline): # state, then it will be marked as 'running'. is_running = False for process in psutil.process_iter(["cmdline", "status"]): - if ((' '.join(process.cmdline())).startswith(process_cmdline) and process.status() in ["running", "sleeping"]): - is_running = True - break + try: + if ((' '.join(process.cmdline())).startswith(process_cmdline) and process.status() in ["running", "sleeping"]): + is_running = True + break + except psutil.NoSuchProcess: + pass if not is_running: # If this script is run by Monit, then the following output will be appended to