From 698edbfa9b70de72677bef94d6676ce18e2be9ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E5=9B=BD=E4=BA=AE?= Date: Sat, 9 Aug 2025 19:19:48 +0800 Subject: [PATCH 1/6] =?UTF-8?q?SP=E5=A4=9A=E8=BF=9B=E7=A8=8B=E9=87=87?= =?UTF-8?q?=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 牛国亮 --- .../client/client_command/include/sp_utils.h | 2 + .../client_command/include/startup_delay.h | 5 +- .../client_command/include/task_manager.h | 1 + .../client/client_command/sp_utils.cpp | 22 ++++ .../client/client_command/startup_delay.cpp | 109 +++++++++++++++--- .../client/client_command/task_manager.cpp | 9 +- 6 files changed, 127 insertions(+), 21 deletions(-) diff --git a/host/smartperf/client/client_command/include/sp_utils.h b/host/smartperf/client/client_command/include/sp_utils.h index 3e3a57172..8e41e8895 100644 --- a/host/smartperf/client/client_command/include/sp_utils.h +++ b/host/smartperf/client/client_command/include/sp_utils.h @@ -170,6 +170,8 @@ size_t GetFileSize(std::string filePath); bool IsFindDHGame(const std::string &pkg); std::string GetSurface(); std::string GetProductName(); +std::string EscapeShellArgs(const std::string& args); +bool IsInvalidPkgName(const std::string& pkgName); }; } } diff --git a/host/smartperf/client/client_command/include/startup_delay.h b/host/smartperf/client/client_command/include/startup_delay.h index 511c484f9..254a4b00a 100644 --- a/host/smartperf/client/client_command/include/startup_delay.h +++ b/host/smartperf/client/client_command/include/startup_delay.h @@ -24,13 +24,16 @@ public: void GetTrace(const std::string &traceName) const; void GetHisysIdAndKill() const; void GetHisysId() const; - std::string GetPidByPkg(const std::string &curPkgName, std::string* pids = nullptr) const; + std::string GetPidByPkg(const std::string &curPkgName, std::string* pids = nullptr); bool KillSpProcess() const; bool GetSpClear(bool isKillTestServer) const; void ClearOldServer() const; std::string ExecuteCommand(const std::vector &args) const; std::vector GetPidParams() const; void KillTestSpdaemon(const std::string &line, const std::string &curPid) const; + std::string GetLocalPermission(const std::string& curPkgName); + std::string GetEachRowData(const std::string& curPkgName); + std::vector> GetAppProcInfor(const std::string& curPkgName); }; } } diff --git a/host/smartperf/client/client_command/include/task_manager.h b/host/smartperf/client/client_command/include/task_manager.h index b6d6a743d..15715c956 100644 --- a/host/smartperf/client/client_command/include/task_manager.h +++ b/host/smartperf/client/client_command/include/task_manager.h @@ -86,6 +86,7 @@ private: std::condition_variable finishCond_; std::mutex finishMtx_; std::string processName_; + std::string mainProcessId_; std::string processIds_; bool printDataInfo_ {true}; bool ipcDataRecv_ {false}; diff --git a/host/smartperf/client/client_command/sp_utils.cpp b/host/smartperf/client/client_command/sp_utils.cpp index 29f10195a..1d4151771 100644 --- a/host/smartperf/client/client_command/sp_utils.cpp +++ b/host/smartperf/client/client_command/sp_utils.cpp @@ -971,5 +971,27 @@ std::string SPUtils::GetProductName() { return PRODUCT_NAME; } + +std::string SPUtils::EscapeShellArgs(const std::string& args) +{ + std::string escaped; + size_t expansion = 2; + escaped.reserve(args.size() * expansion); + const char* specicalChars = "\\\"$`;|><(){}[]^~*?#!%@ "; + for (char c : args) { + if (std::strchr(specicalChars, c)) { + escaped += c; + } + } + LOGD("SPUtils::EscapeShellArgs escaped = (%s)", escaped.c_str()); + return escaped; +} + +bool SPUtils::IsInvalidPkgName(const std::string& pkgName) +{ + return std::all_of(pkgName.begin(), pkgName.end(), [](char c)) { + return isalnum(c) || c == '.' || c == '_'; + } +} } } diff --git a/host/smartperf/client/client_command/startup_delay.cpp b/host/smartperf/client/client_command/startup_delay.cpp index b6f5ff36d..8285623ce 100644 --- a/host/smartperf/client/client_command/startup_delay.cpp +++ b/host/smartperf/client/client_command/startup_delay.cpp @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include #include #include @@ -31,6 +33,7 @@ namespace OHOS { namespace SmartPerf { +constexpr std::string MAIN_PROCESS_ID = ""; std::vector g_pidParams; StartUpDelay::StartUpDelay() {} StartUpDelay::~StartUpDelay() {} @@ -226,27 +229,99 @@ std::string StartUpDelay::ExecuteCommand(const std::vector &args) c return output; } -std::string StartUpDelay::GetPidByPkg(const std::string &curPkgName, std::string* pids) const +std::string StartUpDelay::GetLocalPermission(const std::string& curPkgName) { - std::vector args = {"pidof", curPkgName.c_str()}; - args.push_back(nullptr); - std::string resultProcId = ExecuteCommand(args); - LOGD("StartUpDelay::resultProcId(%s)", resultProcId.c_str()); - if (!resultProcId.empty()) { - if (resultProcId.back() == '\n') { - resultProcId.pop_back(); + const std::string pkgName = SPUtils::EscapeShellArgs(curPkgName); + bool isInvalidPkgName = SPUtils::IsInvalidPkgName(pkgName); + if (!isInvalidPkgName) { + LOGE("StartUpDelay::GetLocalPermission pkgname is invalid!"); + return ""; + } + const std::string curAPPlicationPath = "/data/local/tmp/curAPPlication"; + std::string command = "ps -ef | grep -v grep | grep "; + command += pkgName; + command += "> " + curAPPlicationPath; + std::system(command.c_str()); + std::string appPathChmod; + if (!curAPPlicationPath.empty()) { + const std::string pathChmod = "chmod 777 " + curAPPlicationPath; + if (!SPUtils::LoadCmd(pathChmod, appPathChmod)) { + LOGE("StartUpDelay::GetLocalPermission chmod failed!"); + return ""; } - g_pidParams.clear(); - SPUtils::StrSplit(resultProcId, " ", g_pidParams); - pids == nullptr ? "" : *pids = resultProcId; - size_t endpos = resultProcId.find(" "); - if (endpos != std::string::npos) { - resultProcId = resultProcId.substr(0, endpos); + } + return curAPPlicationPath; +} + +std::string StartUpDelay::GetEachRowData(const std::string& curPkgName) +{ + const std::string applicationLocalPath = GetLocalPermission(curPkgName); + std::string eachRowOfData; + char realPath[PATH_MAX] = {0x00}; + if (realpath(applicationLocalPath.c_str(), realPath) == nullptr) { + LOGE("StartUpDelay::GetAllPid get realpath failed!"); + return eachRowOfData; + } + FILE *fp = fopen(realPath, "r"); + if (fp == nullptr) { + LOGE("StartUpDelay::GetAllPid fp open failed!"); + return eachRowOfData; + } + char line[1024]; + while (fgets(line, sizeof(line), fp) != nullptr) { + eachRowOfData += line; + } + int fcloseResult = fclose(fp); + if (fcloseResult == EOF) { + LOGE("StartUpDelay::GetAllPid fclose failed!"); + return eachRowOfData; + } + return eachRowOfData; +} + +std::vector> StartUpDelay::GetAppProcInfor(const std::string& curPkgName) +{ + std::vector allPids; + std::vector> resultAppProcInfor; + const size_t mainProcessPose = 1; + std::string eachRowOfData = GetEachRowData(curPkgName); + std::istringstream iss(eachRowOfData); + std::string line; + while (std::getline(iss, line)) { + if (line.find("root") != std::string::npos) { + continue; + } + std::vector eachRowOfProceInfor; + SPUtils::StrSplit(line, " ", eachRowOfProceInfor); + for (const auto& procName : eachRowOfProceInfor) { + if (procName == curPkgName) { + MAIN_PROCESS_ID = eachRowOfProceInfor[mainProcessPose]; + break; + } } - LOGD("startup_delay::output: (%s) (%s)", resultProcId.c_str(), - pids == nullptr ? resultProcId.c_str() : pids->c_str()); + resultAppProcInfor.push_back(eachRowOfProceInfor); + } + return resultAppProcInfor; +} + +std::string StartUpDelay::GetPidByPkg(const std::string &curPkgName, std::string* pids) +{ + std::vector> resultProceInfor = GetAppProcInfor(curPkgName); + std::string resultChildProcId; + g_pidParams.clear(); + const size_t indexOne = 1; + for (size_t i = 0; i < resultProceInfor.size(); ++i) { + g_pidParams.push_back(resultProceInfor[i][indexOne]); + resultChildProcId += resultProceInfor[i][indexOne]; + } + if (!resultChildProcId.empty()) { + const size_t firstNonSpace = resultChildProcId.find_first_one_of(" "); + resultChildProcId = resultChildProcId.substr(firstNonSpace); } - return resultProcId; + pids == nullptr ? "" : *pids = resultChildProcId; + LOGD("StartUpDelay::GetPidByPkg: MAIN_PROCESS_ID = (%s), pids = (%s)", MAIN_PROCESS_ID.c_str(), + pids == nullptr ? resultChildProcId.c_str() : pids->c_str()); + return MAIN_PROCESS_ID; } std::vector StartUpDelay::GetPidParams() const diff --git a/host/smartperf/client/client_command/task_manager.cpp b/host/smartperf/client/client_command/task_manager.cpp index 39432b438..6d4e7563d 100644 --- a/host/smartperf/client/client_command/task_manager.cpp +++ b/host/smartperf/client/client_command/task_manager.cpp @@ -435,12 +435,15 @@ void TaskManager::GetProcessInfo(CommandType type, const ArgumentParser::ArgValu if (type == CommandType::CT_PKG) { processName_ = std::get(value); OHOS::SmartPerf::StartUpDelay sp; - sp.GetPidByPkg(processName_, &processIds_); + std::string mainProceId = sp.GetPidByPkg(processName_, &processIds_); + if (!mainProceId.empty()) { + mainProcessId_ = mainProceId; + } } if (type == CommandType::CT_PID) { - processIds_ = std::to_string(std::get(value)); - const std::string getProcPkg = "cat /proc/" + processIds_ + "/cmdline"; + mainProcessId_ = std::to_string(std::get(value)); + const std::string getProcPkg = "cat /proc/" + mainProcessId_ + "/cmdline"; FILE *fd = popen(getProcPkg.c_str(), "r"); if (fd == nullptr) { return; -- Gitee From 10f12554a20001cfc3cce9de0a98514ae29da11f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E5=9B=BD=E4=BA=AE?= Date: Sat, 9 Aug 2025 19:23:24 +0800 Subject: [PATCH 2/6] =?UTF-8?q?SP=E5=A4=9A=E8=BF=9B=E7=A8=8B=E9=87=87?= =?UTF-8?q?=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 牛国亮 --- host/smartperf/client/client_command/startup_delay.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/host/smartperf/client/client_command/startup_delay.cpp b/host/smartperf/client/client_command/startup_delay.cpp index 8285623ce..009875314 100644 --- a/host/smartperf/client/client_command/startup_delay.cpp +++ b/host/smartperf/client/client_command/startup_delay.cpp @@ -281,7 +281,6 @@ std::string StartUpDelay::GetEachRowData(const std::string& curPkgName) std::vector> StartUpDelay::GetAppProcInfor(const std::string& curPkgName) { - std::vector allPids; std::vector> resultAppProcInfor; const size_t mainProcessPose = 1; std::string eachRowOfData = GetEachRowData(curPkgName); -- Gitee From 90f66cbcd3daefce92023da2648f725fd14ed722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E5=9B=BD=E4=BA=AE?= Date: Sat, 9 Aug 2025 19:44:32 +0800 Subject: [PATCH 3/6] =?UTF-8?q?SP=E5=A4=9A=E8=BF=9B=E7=A8=8B=E9=87=87?= =?UTF-8?q?=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 牛国亮 --- host/smartperf/client/client_command/startup_delay.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/host/smartperf/client/client_command/startup_delay.cpp b/host/smartperf/client/client_command/startup_delay.cpp index 009875314..ff8f26627 100644 --- a/host/smartperf/client/client_command/startup_delay.cpp +++ b/host/smartperf/client/client_command/startup_delay.cpp @@ -33,7 +33,7 @@ namespace OHOS { namespace SmartPerf { -constexpr std::string MAIN_PROCESS_ID = ""; +const std::string MAIN_PROCESS_ID = ""; std::vector g_pidParams; StartUpDelay::StartUpDelay() {} StartUpDelay::~StartUpDelay() {} -- Gitee From 88f66000ead86616bf6d7ae19dd4e8abf37d7109 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E5=9B=BD=E4=BA=AE?= Date: Mon, 11 Aug 2025 12:05:35 +0800 Subject: [PATCH 4/6] =?UTF-8?q?SP=E5=A4=9A=E8=BF=9B=E7=A8=8B=E9=87=87?= =?UTF-8?q?=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 牛国亮 --- .../client_command/include/startup_delay.h | 9 ++- .../client/client_command/sp_utils.cpp | 11 +-- .../client/client_command/startup_delay.cpp | 77 ++++--------------- 3 files changed, 27 insertions(+), 70 deletions(-) diff --git a/host/smartperf/client/client_command/include/startup_delay.h b/host/smartperf/client/client_command/include/startup_delay.h index 254a4b00a..ed2f330b9 100644 --- a/host/smartperf/client/client_command/include/startup_delay.h +++ b/host/smartperf/client/client_command/include/startup_delay.h @@ -17,6 +17,14 @@ #include namespace OHOS { namespace SmartPerf { +enum ErrorCode { + GET_IS_EMPTY = 1100, + INVALID_PKG_NAME = 1101, + CHMOD_FAILED = 1102, + GET_REALPATH_FAILED = 1103, + FEAIL_OPEN_FAILED = 1104, + FCLOSE_FAILED = 1105, +}; class StartUpDelay { public: StartUpDelay(); @@ -28,7 +36,6 @@ public: bool KillSpProcess() const; bool GetSpClear(bool isKillTestServer) const; void ClearOldServer() const; - std::string ExecuteCommand(const std::vector &args) const; std::vector GetPidParams() const; void KillTestSpdaemon(const std::string &line, const std::string &curPid) const; std::string GetLocalPermission(const std::string& curPkgName); diff --git a/host/smartperf/client/client_command/sp_utils.cpp b/host/smartperf/client/client_command/sp_utils.cpp index 1d4151771..203f379d3 100644 --- a/host/smartperf/client/client_command/sp_utils.cpp +++ b/host/smartperf/client/client_command/sp_utils.cpp @@ -975,13 +975,14 @@ std::string SPUtils::GetProductName() std::string SPUtils::EscapeShellArgs(const std::string& args) { std::string escaped; - size_t expansion = 2; + const size_t expansion = 2; escaped.reserve(args.size() * expansion); - const char* specicalChars = "\\\"$`;|><(){}[]^~*?#!%@ "; + const char* specicalChars = "\\\"$`;&|><(){}[]^~*?#!%@ "; for (char c : args) { if (std::strchr(specicalChars, c)) { - escaped += c; + escaped += '\\'; } + escaped += c; } LOGD("SPUtils::EscapeShellArgs escaped = (%s)", escaped.c_str()); return escaped; @@ -989,9 +990,9 @@ std::string SPUtils::EscapeShellArgs(const std::string& args) bool SPUtils::IsInvalidPkgName(const std::string& pkgName) { - return std::all_of(pkgName.begin(), pkgName.end(), [](char c)) { + return std::all_of(pkgName.begin(), pkgName.end(), [](char c) { return isalnum(c) || c == '.' || c == '_'; - } + }); } } } diff --git a/host/smartperf/client/client_command/startup_delay.cpp b/host/smartperf/client/client_command/startup_delay.cpp index ff8f26627..9c311b36f 100644 --- a/host/smartperf/client/client_command/startup_delay.cpp +++ b/host/smartperf/client/client_command/startup_delay.cpp @@ -33,7 +33,7 @@ namespace OHOS { namespace SmartPerf { -const std::string MAIN_PROCESS_ID = ""; +std::string MAIN_PROCESS_ID = ""; std::vector g_pidParams; StartUpDelay::StartUpDelay() {} StartUpDelay::~StartUpDelay() {} @@ -179,63 +179,13 @@ void StartUpDelay::ClearOldServer() const } } } -std::string StartUpDelay::ExecuteCommand(const std::vector &args) const -{ - std::string output = ""; - int pipefd[2]; - if (pipe(pipefd) == -1) { - LOGE("startup_delay::Failed to create pipe: %s", strerror(errno)); - return output; - } - pid_t pid = fork(); - if (pid == -1) { - LOGE("startup_delay::Failed to fork: %s", strerror(errno)); - close(pipefd[0]); - close(pipefd[1]); - return output; - } - if (pid == 0) { - close(pipefd[0]); - dup2(pipefd[1], STDOUT_FILENO); - close(pipefd[1]); - if (args.empty() || args[0] == nullptr) { - LOGE("startup_delay::Invalid commd"); - return output; - } - execvp(args[0], const_cast(args.data())); - LOGE("startup_delay::Failed to execute pid: %s", strerror(errno)); - _exit(EXIT_FAILURE); - } - close(pipefd[1]); - char buf[1024]; - ssize_t nread; - while ((nread = read(pipefd[0], buf, sizeof(buf) - 1)) > 0) { - if (nread == sizeof(buf) - 1) { - LOGE("startup_delay::Buffer overflow: %s", strerror(errno)); - break; - } - buf[nread] = '\0'; - output.append(buf); - } - if (nread == -1) { - LOGE("startup_delay::Failed to read from pipe: %s", strerror(errno)); - } - close(pipefd[0]); - int status; - if (waitpid(pid, &status, 0) == -1) { - LOGE("startup_delay::Failed to wait for child process: %s", strerror(errno)); - return output; - } - return output; -} std::string StartUpDelay::GetLocalPermission(const std::string& curPkgName) { const std::string pkgName = SPUtils::EscapeShellArgs(curPkgName); bool isInvalidPkgName = SPUtils::IsInvalidPkgName(pkgName); if (!isInvalidPkgName) { - LOGE("StartUpDelay::GetLocalPermission pkgname is invalid!"); - return ""; + return std::to_string(ErrorCode::INVALID_PKG_NAME); } const std::string curAPPlicationPath = "/data/local/tmp/curAPPlication"; std::string command = "ps -ef | grep -v grep | grep "; @@ -244,10 +194,9 @@ std::string StartUpDelay::GetLocalPermission(const std::string& curPkgName) std::system(command.c_str()); std::string appPathChmod; if (!curAPPlicationPath.empty()) { - const std::string pathChmod = "chmod 777 " + curAPPlicationPath; + const std::string pathChmod = "chmod 660 " + curAPPlicationPath; if (!SPUtils::LoadCmd(pathChmod, appPathChmod)) { - LOGE("StartUpDelay::GetLocalPermission chmod failed!"); - return ""; + return std::to_string(ErrorCode::CHMOD_FAILED); } } return curAPPlicationPath; @@ -259,13 +208,11 @@ std::string StartUpDelay::GetEachRowData(const std::string& curPkgName) std::string eachRowOfData; char realPath[PATH_MAX] = {0x00}; if (realpath(applicationLocalPath.c_str(), realPath) == nullptr) { - LOGE("StartUpDelay::GetAllPid get realpath failed!"); - return eachRowOfData; + return std::to_string(ErrorCode::GET_REALPATH_FAILED); } FILE *fp = fopen(realPath, "r"); if (fp == nullptr) { - LOGE("StartUpDelay::GetAllPid fp open failed!"); - return eachRowOfData; + return std::to_string(ErrorCode::FEAIL_OPEN_FAILED); } char line[1024]; while (fgets(line, sizeof(line), fp) != nullptr) { @@ -273,8 +220,7 @@ std::string StartUpDelay::GetEachRowData(const std::string& curPkgName) } int fcloseResult = fclose(fp); if (fcloseResult == EOF) { - LOGE("StartUpDelay::GetAllPid fclose failed!"); - return eachRowOfData; + return std::to_string(ErrorCode::FCLOSE_FAILED); } return eachRowOfData; } @@ -284,6 +230,9 @@ std::vector> StartUpDelay::GetAppProcInfor(const std::s std::vector> resultAppProcInfor; const size_t mainProcessPose = 1; std::string eachRowOfData = GetEachRowData(curPkgName); + if (eachRowOfData.empty()) { + return std::to_string(ErrorCode::GET_IS_EMPTY); + } std::istringstream iss(eachRowOfData); std::string line; while (std::getline(iss, line)) { @@ -311,14 +260,14 @@ std::string StartUpDelay::GetPidByPkg(const std::string &curPkgName, std::string const size_t indexOne = 1; for (size_t i = 0; i < resultProceInfor.size(); ++i) { g_pidParams.push_back(resultProceInfor[i][indexOne]); - resultChildProcId += resultProceInfor[i][indexOne]; + resultChildProcId += (" " + resultProceInfor[i][indexOne]); } if (!resultChildProcId.empty()) { - const size_t firstNonSpace = resultChildProcId.find_first_one_of(" "); + const size_t firstNonSpace = resultChildProcId.find_first_not_of(" "); resultChildProcId = resultChildProcId.substr(firstNonSpace); } pids == nullptr ? "" : *pids = resultChildProcId; - LOGD("StartUpDelay::GetPidByPkg: MAIN_PROCESS_ID = (%s), pids = (%s)", MAIN_PROCESS_ID.c_str(), + LOGD("GetPidByPkg: MAIN_PROCESS_ID = (%s), pids = (%s)", MAIN_PROCESS_ID.c_str(), pids == nullptr ? resultChildProcId.c_str() : pids->c_str()); return MAIN_PROCESS_ID; } -- Gitee From 0f8694fe4ecbef2bcc8f3a3325b51de63f066de4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E5=9B=BD=E4=BA=AE?= Date: Mon, 11 Aug 2025 15:14:57 +0800 Subject: [PATCH 5/6] =?UTF-8?q?SP=E5=A4=9A=E8=BF=9B=E7=A8=8B=E9=87=87?= =?UTF-8?q?=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 牛国亮 --- .../client_command/include/startup_delay.h | 15 +++--- .../client/client_command/sp_utils.cpp | 5 +- .../client/client_command/startup_delay.cpp | 54 ++++++------------- 3 files changed, 27 insertions(+), 47 deletions(-) diff --git a/host/smartperf/client/client_command/include/startup_delay.h b/host/smartperf/client/client_command/include/startup_delay.h index ed2f330b9..a14782eb2 100644 --- a/host/smartperf/client/client_command/include/startup_delay.h +++ b/host/smartperf/client/client_command/include/startup_delay.h @@ -17,13 +17,11 @@ #include namespace OHOS { namespace SmartPerf { -enum ErrorCode { - GET_IS_EMPTY = 1100, - INVALID_PKG_NAME = 1101, - CHMOD_FAILED = 1102, - GET_REALPATH_FAILED = 1103, - FEAIL_OPEN_FAILED = 1104, - FCLOSE_FAILED = 1105, +enum ErrorSpCode { + DATA_IS_EMPTY = 100001, + INVALID_PKG_NAME = 100002, + FILE_OPEN_IS_NULL = 100003, + FILE_CLOSE_FAILED = 100004, }; class StartUpDelay { public: @@ -38,8 +36,7 @@ public: void ClearOldServer() const; std::vector GetPidParams() const; void KillTestSpdaemon(const std::string &line, const std::string &curPid) const; - std::string GetLocalPermission(const std::string& curPkgName); - std::string GetEachRowData(const std::string& curPkgName); + std::string GetAppInforByPs(const std::string& curPkgName); std::vector> GetAppProcInfor(const std::string& curPkgName); }; } diff --git a/host/smartperf/client/client_command/sp_utils.cpp b/host/smartperf/client/client_command/sp_utils.cpp index 203f379d3..da8134b1a 100644 --- a/host/smartperf/client/client_command/sp_utils.cpp +++ b/host/smartperf/client/client_command/sp_utils.cpp @@ -977,7 +977,7 @@ std::string SPUtils::EscapeShellArgs(const std::string& args) std::string escaped; const size_t expansion = 2; escaped.reserve(args.size() * expansion); - const char* specicalChars = "\\\"$`;&|><(){}[]^~*?#!%@ "; + const char* specicalChars = R"(\\"$`;&|><(){}[]^~*?#!%@ )"; for (char c : args) { if (std::strchr(specicalChars, c)) { escaped += '\\'; @@ -990,6 +990,9 @@ std::string SPUtils::EscapeShellArgs(const std::string& args) bool SPUtils::IsInvalidPkgName(const std::string& pkgName) { + if (pkgName.empty() || !isalpha(pkgName[0])) { + return false; + } return std::all_of(pkgName.begin(), pkgName.end(), [](char c) { return isalnum(c) || c == '.' || c == '_'; }); diff --git a/host/smartperf/client/client_command/startup_delay.cpp b/host/smartperf/client/client_command/startup_delay.cpp index 9c311b36f..5ac1bbec6 100644 --- a/host/smartperf/client/client_command/startup_delay.cpp +++ b/host/smartperf/client/client_command/startup_delay.cpp @@ -180,58 +180,38 @@ void StartUpDelay::ClearOldServer() const } } -std::string StartUpDelay::GetLocalPermission(const std::string& curPkgName) +std::string StartUpDelay::GetAppInforByPs(const std::string& curPkgName) { const std::string pkgName = SPUtils::EscapeShellArgs(curPkgName); bool isInvalidPkgName = SPUtils::IsInvalidPkgName(pkgName); if (!isInvalidPkgName) { - return std::to_string(ErrorCode::INVALID_PKG_NAME); + return std::to_string(ErrorSpCode::INVALID_PKG_NAME); } - const std::string curAPPlicationPath = "/data/local/tmp/curAPPlication"; - std::string command = "ps -ef | grep -v grep | grep "; - command += pkgName; - command += "> " + curAPPlicationPath; - std::system(command.c_str()); - std::string appPathChmod; - if (!curAPPlicationPath.empty()) { - const std::string pathChmod = "chmod 660 " + curAPPlicationPath; - if (!SPUtils::LoadCmd(pathChmod, appPathChmod)) { - return std::to_string(ErrorCode::CHMOD_FAILED); - } - } - return curAPPlicationPath; -} - -std::string StartUpDelay::GetEachRowData(const std::string& curPkgName) -{ - const std::string applicationLocalPath = GetLocalPermission(curPkgName); - std::string eachRowOfData; - char realPath[PATH_MAX] = {0x00}; - if (realpath(applicationLocalPath.c_str(), realPath) == nullptr) { - return std::to_string(ErrorCode::GET_REALPATH_FAILED); - } - FILE *fp = fopen(realPath, "r"); - if (fp == nullptr) { - return std::to_string(ErrorCode::FEAIL_OPEN_FAILED); + std::string psCommand = "ps -ef | grep -v grep | grep "; + psCommand += pkgName; + std::vector line(1024); + std::string appProcessInfor; + FILE *fd = popen(command.c_str(), "r"); + if (fd == nullptr) { + return std::to_string(ErrorSpCode::FILE_OPEN_IS_NULL); } - char line[1024]; - while (fgets(line, sizeof(line), fp) != nullptr) { - eachRowOfData += line; + while (fgets(line.data(), line.size(), fd) != nullptr) { + appProcessInfor += line.data(); } - int fcloseResult = fclose(fp); - if (fcloseResult == EOF) { - return std::to_string(ErrorCode::FCLOSE_FAILED); + int pcloseResult = pclose(fd); + if (pcloseResult == -1) { + return std::to_string(ErrorSpCode::FILE_CLOSE_FAILED); } - return eachRowOfData; + return appProcessInfor; } std::vector> StartUpDelay::GetAppProcInfor(const std::string& curPkgName) { std::vector> resultAppProcInfor; const size_t mainProcessPose = 1; - std::string eachRowOfData = GetEachRowData(curPkgName); + const std::string eachRowOfData = GetAppInforByPs(curPkgName); if (eachRowOfData.empty()) { - return std::to_string(ErrorCode::GET_IS_EMPTY); + return {{std::to_string(ErrorSpCode::DATA_IS_EMPTY), "Not data found for package"}}; } std::istringstream iss(eachRowOfData); std::string line; -- Gitee From 2700d80efea0047c1f1ab1996fe7d94dc29ebd1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E5=9B=BD=E4=BA=AE?= Date: Mon, 11 Aug 2025 15:59:57 +0800 Subject: [PATCH 6/6] =?UTF-8?q?SP=E5=A4=9A=E8=BF=9B=E7=A8=8B=E9=87=87?= =?UTF-8?q?=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 牛国亮 --- host/smartperf/client/client_command/task_manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/host/smartperf/client/client_command/task_manager.cpp b/host/smartperf/client/client_command/task_manager.cpp index 6d4e7563d..50261b322 100644 --- a/host/smartperf/client/client_command/task_manager.cpp +++ b/host/smartperf/client/client_command/task_manager.cpp @@ -442,8 +442,8 @@ void TaskManager::GetProcessInfo(CommandType type, const ArgumentParser::ArgValu } if (type == CommandType::CT_PID) { - mainProcessId_ = std::to_string(std::get(value)); - const std::string getProcPkg = "cat /proc/" + mainProcessId_ + "/cmdline"; + processIds_ = std::to_string(std::get(value)); + const std::string getProcPkg = "cat /proc/" + processIds_ + "/cmdline"; FILE *fd = popen(getProcPkg.c_str(), "r"); if (fd == nullptr) { return; -- Gitee