From 304c0f1c14a72fa20bafb4bf7b5b44e6ca1ca01c Mon Sep 17 00:00:00 2001 From: Jing Ji Date: Mon, 27 Feb 2023 21:58:19 -0800 Subject: [PATCH] Kill its process group even if the given process is already dead So the child processes in the process group won't be orphaned when we decide to kill the process group of a given process but find it's already dead. Bug: 266633286 Test: atest MicrodroidDemoApp Change-Id: Ib6f45b992566f0ab5cf152463c95294a306dd736 --- libprocessgroup/processgroup.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/libprocessgroup/processgroup.cpp b/libprocessgroup/processgroup.cpp index 1da69ba34..384a8f07d 100644 --- a/libprocessgroup/processgroup.cpp +++ b/libprocessgroup/processgroup.cpp @@ -406,18 +406,15 @@ static int DoKillProcessGroupOnce(const char* cgroup, uid_t uid, int initialPid, pids.emplace(pid); } } - if (file_is_empty) { - // This happens when process is already dead - return 0; - } - - // Erase all pids that will be killed when we kill the process groups. - for (auto it = pids.begin(); it != pids.end();) { - pid_t pgid = getpgid(*it); - if (pgids.count(pgid) == 1) { - it = pids.erase(it); - } else { - ++it; + if (!file_is_empty) { + // Erase all pids that will be killed when we kill the process groups. + for (auto it = pids.begin(); it != pids.end();) { + pid_t pgid = getpgid(*it); + if (pgids.count(pgid) == 1) { + it = pids.erase(it); + } else { + ++it; + } } } }