From a291d185e0b22834d4283906e02b9fb3e92bc190 Mon Sep 17 00:00:00 2001 From: chenbingbing Date: Mon, 2 Jun 2025 16:48:33 +0800 Subject: [PATCH] modify get running process interface Signed-off-by: chenbingbing --- .../schedule/system_ability_state_scheduler.h | 4 ++ .../system_ability_state_scheduler.cpp | 43 ++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/services/samgr/native/include/schedule/system_ability_state_scheduler.h b/services/samgr/native/include/schedule/system_ability_state_scheduler.h index 842ec7c1..1d3aa0f3 100644 --- a/services/samgr/native/include/schedule/system_ability_state_scheduler.h +++ b/services/samgr/native/include/schedule/system_ability_state_scheduler.h @@ -136,6 +136,8 @@ private: void OnAbilityUnloadableLocked(int32_t systemAbilityId) override; void OnProcessNotStartedLocked(const std::u16string& processName) override; void OnProcessStartedLocked(const std::u16string& processName) override; + void RemoveRunningProcessLocked(const std::shared_ptr& processContext); + void AddRunningProcessLocked(const std::shared_ptr& processContext); int32_t ActiveSystemAbilityLocked(const std::shared_ptr& abilityContext, const nlohmann::json& activeReason); @@ -174,6 +176,8 @@ private: std::map> startEnableOnceMap_; std::mutex stopEnableOnceLock_; std::map> stopEnableOnceMap_; + std::mutex runningProcessListLock_; + std::list runningProcessList_; }; } // namespace OHOS diff --git a/services/samgr/native/source/schedule/system_ability_state_scheduler.cpp b/services/samgr/native/source/schedule/system_ability_state_scheduler.cpp index 62071a78..35938c25 100644 --- a/services/samgr/native/source/schedule/system_ability_state_scheduler.cpp +++ b/services/samgr/native/source/schedule/system_ability_state_scheduler.cpp @@ -445,7 +445,15 @@ int32_t SystemAbilityStateScheduler::SendProcessStateEvent(const ProcessInfo& pr return ERR_INVALID_VALUE; } std::lock_guard autoLock(processContext->processLock); - return stateEventHandler_->HandleProcessEventLocked(processContext, processInfo, event); + int32_t ret = stateEventHandler_->HandleProcessEventLocked(processContext, processInfo, event); + if (ret == ERR_OK) { + if (event == ProcessStateEvent::PROCESS_STARTED_EVENT) { + AddRunningProcessLocked(processContext); + } else { + RemoveRunningProcessLocked(processContext); + } + } + return ret; } int32_t SystemAbilityStateScheduler::SendDelayUnloadEventLocked(uint32_t systemAbilityId, int32_t delayTime) @@ -1446,6 +1454,39 @@ bool SystemAbilityStateScheduler::GetLruIdleSystemAbilityInfo(int32_t systemAbil return true; } +void SystemAbilityStateScheduler::RemoveRunningProcessLocked( + const std::shared_ptr& processContext) +{ + std::lock_guard autoLock(runningProcessListLock_); + auto it = std::find_if(runningProcessList_.begin(), runningProcessList_.end(), + [&](const SystemProcessInfo& systemProcessInfo) { + return systemProcessInfo.processName == Str16ToStr8(processContext->processName); + }); + if (it != runningProcessList_.end()) { + runningProcessList_.erase(it); + HILOGI("runningProcessList_ remove process:%{public}s", Str16ToStr8(processContext->processName).c_str()); + } +} + +void SystemAbilityStateScheduler::AddRunningProcessLocked( + const std::shared_ptr& processContext) +{ + std::lock_guard autoLock(runningProcessListLock_); + auto it = std::find_if(runningProcessList_.begin(), runningProcessList_.end(), + [&](const SystemProcessInfo& systemProcessInfo) { + return systemProcessInfo.processName == Str16ToStr8(processContext->processName); + }); + if (it == runningProcessList_.end()) { + SystemProcessInfo systemProcessInfo = {Str16ToStr8(processContext->processName), processContext->pid, + processContext->uid}; + runningProcessList_.emplace_back(std::move(systemProcessInfo)); + } else { + it->pid = processContext->pid; + it->uid = processContext->uid; + } + HILOGI("runningProcessList_ add process:%{public}s", Str16ToStr8(processContext->processName).c_str()); +} + void SystemAbilityStateScheduler::UnloadEventHandler::ProcessEvent(uint32_t eventId) { int32_t systemAbilityId = static_cast(eventId); -- Gitee