ProcessUtil

public final class ProcessUtil
extends Object

java.lang.Object
   ↳ com.android.sts.common.ProcessUtil


各種輔助工具,用於在裝置上尋找、等待及終止程序

摘要

巢狀類別

class ProcessUtil.KillException

 

常數

long PROCESS_POLL_PERIOD_MS

long PROCESS_WAIT_TIMEOUT_MS

公用方法

static Optional<IFileEntry> findFileLoadedByProcess(ITestDevice device, String process, String filenameSubstr)

傳回指定程序載入的第一個檔案的檔案項目,並指定名稱

static Optional<List<String>> findFilesLoadedByProcess(ITestDevice device, int pid, Pattern filePattern)

傳回指定程序載入的指定檔案檔案名稱。

static Optional<String> getProcessName(ITestDevice device, int pid)

從 /proc/pid/cmdline 取得內容。

static boolean killAll(ITestDevice device, String pgrepRegex, long timeoutMs, boolean expectExist)

將 SIGKILL 傳送至符合模式的所有程序。

static boolean killAll(ITestDevice device, String pgrepRegex, long timeoutMs)

將 SIGKILL 傳送至符合模式的所有程序。

static void killPid(ITestDevice device, int pid, long timeoutMs)

將 SIGKILL 傳送至程序,然後等待程序結束。

static void killPid(ITestDevice device, int pid, int signal, long timeoutMs)

向程序傳送信號,並等待程序結束。

static Optional<List<String>> listOpenFiles(ITestDevice device, int pid)

傳回目前開啟的指定程序檔案名稱。

static Optional<Integer> pidOf(ITestDevice device, String pgrepRegex)

取得與傳遞至 `pgrep` 的模式相符的單一 pid。

static Optional<Map<Integer, String>> pidsOf(ITestDevice device, String pgrepRegex)

取得與傳遞至 `pgrep` 的模式相符的 pid。

static void waitPidExited(ITestDevice device, int pid)

等待程序結束。

static void waitPidExited(ITestDevice device, int pid, long timeoutMs)

等待程序結束。

static Map<Integer, String> waitProcessRunning(ITestDevice device, String pgrepRegex, long timeoutMs)

等待找到特定規則運算式所對應的執行中程序。

static Map<Integer, String> waitProcessRunning(ITestDevice device, String pgrepRegex)

等待找到特定規則運算式所對應的執行中程序。

static AutoCloseable withProcessKill(ITestDevice device, String pgrepRegex, Runnable beforeCloseKill, long timeoutMs)

在測試開始和結束時終止程序。

static AutoCloseable withProcessKill(ITestDevice device, String pgrepRegex, Runnable beforeCloseKill)

在測試開始和結束時終止程序。

常數

PROCESS_POLL_PERIOD_MS

public static final long PROCESS_POLL_PERIOD_MS

常數值: 250 (0x00000000000000fa)

PROCESS_WAIT_TIMEOUT_MS

public static final long PROCESS_WAIT_TIMEOUT_MS

常數值: 10000 (0x0000000000002710)

公用方法

findFileLoadedByProcess

public static Optional<IFileEntry> findFileLoadedByProcess (ITestDevice device, 
                String process, 
                String filenameSubstr)

傳回指定程序載入的第一個檔案的檔案項目,且該程序具有指定名稱

參數
device ITestDevice:要執行的裝置

process String:要查找的程序 pgrep 模式

filenameSubstr String:程序載入的檔案名稱/路徑部分

傳回
Optional<IFileEntry> 裝置上檔案路徑的 IFileEntry 選用項目 (如果有的話)。

擲回
DeviceNotAvailableException

findFilesLoadedByProcess

public static Optional<List<String>> findFilesLoadedByProcess (ITestDevice device, 
                int pid, 
                Pattern filePattern)

傳回指定程序載入的指定檔案檔案名稱。

參數
device ITestDevice:要執行的裝置

pid int:要搜尋的程序 ID

filePattern Pattern:要傳回的檔案名稱格式

傳回
Optional<List<String>> 篩選檔案的選用項目;如果找不到程序或無法讀取已開啟的檔案,則為空白。

擲回
DeviceNotAvailableException

getProcessName

public static Optional<String> getProcessName (ITestDevice device, 
                int pid)

從 /proc/pid/cmdline 取得內容。

參數
device ITestDevice:要使用的裝置

pid int:要取得名稱的程序 ID

傳回
Optional<String> /proc/pid/cmdline 內容的選用字串;如果找不到 pid,則為空白

擲回
DeviceNotAvailableException

killAll

public static boolean killAll (ITestDevice device, 
                String pgrepRegex, 
                long timeoutMs, 
                boolean expectExist)

將 SIGKILL 傳送至符合模式的所有程序。

參數
device ITestDevice:要使用的裝置

pgrepRegex String:代表 pgrep 規則運算式的字串

timeoutMs long:在擲回 TimeoutException 之前等待多久

expectExist boolean:在沒有終止任何程序時,是否應擲回例外狀況

傳回
boolean 是否終止任何程序

擲回
DeviceNotAvailableException
TimeoutException
ProcessUtil.KillException

killAll

public static boolean killAll (ITestDevice device, 
                String pgrepRegex, 
                long timeoutMs)

將 SIGKILL 傳送至符合模式的所有程序。

參數
device ITestDevice:要使用的裝置

pgrepRegex String:代表 pgrep 規則運算式的字串

timeoutMs long:在擲回 TimeoutException 之前等待多久

傳回
boolean 是否終止任何程序

擲回
DeviceNotAvailableException
TimeoutException
ProcessUtil.KillException

killPid

public static void killPid (ITestDevice device, 
                int pid, 
                long timeoutMs)

將 SIGKILL 傳送至程序,然後等待程序結束。

參數
device ITestDevice:要使用的裝置

pid int:等待程序結束的 ID

timeoutMs long:在擲回 TimeoutException 之前等待多久

擲回
DeviceNotAvailableException
TimeoutException
ProcessUtil.KillException

killPid

public static void killPid (ITestDevice device, 
                int pid, 
                int signal, 
                long timeoutMs)

傳送信號至程序,並等待程序結束。

參數
device ITestDevice:要使用的裝置

pid int:等待程序結束的 ID

signal int:要傳送至程序的信號

timeoutMs long:在擲回 TimeoutException 之前等待多久

擲回
DeviceNotAvailableException
TimeoutException
ProcessUtil.KillException

listOpenFiles

public static Optional<List<String>> listOpenFiles (ITestDevice device, 
                int pid)

傳回指定程序目前開啟的檔案名稱。

參數
device ITestDevice:要執行的裝置

pid int:要搜尋的程序 ID

傳回
Optional<List<String>> 可選的已開啟檔案;如果找不到程序或無法讀取已開啟的檔案,則為空白。

擲回
DeviceNotAvailableException

pidOf

public static Optional<Integer> pidOf (ITestDevice device, 
                String pgrepRegex)

取得與傳遞至 `pgrep` 的模式相符的單一 PID。如果有超過一個 PID 與模式相符,就會擲回 IllegalArgumentException

參數
device ITestDevice:要使用的裝置

pgrepRegex String:代表 pgrep 規則運算式的字串

傳回
Optional<Integer> 可選的 PID 整數;如果 pgrep 未傳回 EXIT_SUCCESS,則為空白

擲回
DeviceNotAvailableException
IllegalArgumentException

pidsOf

public static Optional<Map<Integer, String>> pidsOf (ITestDevice device, 
                String pgrepRegex)

取得與傳遞至 `pgrep` 的模式相符的 pid。由於 /proc/pid/comm 已截斷,因此會傳遞 `-f` 給 `pgrep`,以便檢查完整指令列。

參數
device ITestDevice:要使用的裝置

pgrepRegex String:代表 pgrep 規則運算式的字串

傳回
Optional<Map<Integer, String>> 可選的 pid 對應指令列;如果 pgrep 未傳回 EXIT_SUCCESS,則為空白

擲回
DeviceNotAvailableException

waitPidExited

public static void waitPidExited (ITestDevice device, 
                int pid)

等待程序結束。這不是等待變更,而是直接不存在。在兩次輪詢之間重複使用 pid 是可能的,但不太可能

參數
device ITestDevice:要使用的裝置

pid int:等待程序結束的 ID

擲回
TimeoutException
DeviceNotAvailableException
ProcessUtil.KillException

waitPidExited

public static void waitPidExited (ITestDevice device, 
                int pid, 
                long timeoutMs)

等待程序結束。這不是等待變更,而是直接不存在。在兩次輪詢之間重複使用 pid 是可能的,但不太可能

參數
device ITestDevice:要使用的裝置

pid int:等待程序結束的 ID

timeoutMs long:在擲回 TimeoutException 之前等待多久

擲回
TimeoutException
DeviceNotAvailableException
ProcessUtil.KillException

waitProcessRunning

public static Map<Integer, String> waitProcessRunning (ITestDevice device, 
                String pgrepRegex, 
                long timeoutMs)

等待找到特定規則運算式所對應的執行中程序。

參數
device ITestDevice:要使用的裝置

pgrepRegex String:代表 pgrep 規則運算式的字串

timeoutMs long:在擲回 TimeoutException 之前等待多久

傳回
Map<Integer, String> 從 pidsOf(...) 取得的 pid 到指令對應

擲回
TimeoutException
DeviceNotAvailableException

waitProcessRunning

public static Map<Integer, String> waitProcessRunning (ITestDevice device, 
                String pgrepRegex)

等待找到特定規則運算式所對應的執行中程序。

參數
device ITestDevice:要使用的裝置

pgrepRegex String:代表 pgrep 規則運算式的字串

傳回
Map<Integer, String> 從 pidsOf(...) 取得的 pid 到指令對應

擲回
TimeoutException
DeviceNotAvailableException

withProcessKill

public static AutoCloseable withProcessKill (ITestDevice device, 
                String pgrepRegex, 
                Runnable beforeCloseKill, 
                long timeoutMs)

在測試開始和結束時終止程序。

參數
device ITestDevice:要使用的裝置

pgrepRegex String:要給 pgrep 的要終止的程序名稱模式

beforeCloseKill Runnable:在測試結束時,在一般環境中終止程序前,需要清除的任何動作的 runnable。可為空值。

timeoutMs long:等待程序終止的時間長度 (以毫秒為單位)

傳回
AutoCloseable 這個物件會在關閉時再次終止程序

擲回
DeviceNotAvailableException
TimeoutException
ProcessUtil.KillException

withProcessKill

public static AutoCloseable withProcessKill (ITestDevice device, 
                String pgrepRegex, 
                Runnable beforeCloseKill)

在測試開始和結束時終止程序。

參數
device ITestDevice:要使用的裝置

pgrepRegex String:要給 pgrep 的要終止的程序名稱模式

beforeCloseKill Runnable:在測試結束時,在一般環境中終止程序前,需要清除的任何動作的 runnable。可為空值。

傳回
AutoCloseable 這個物件會在關閉時再次終止程序

擲回
DeviceNotAvailableException
TimeoutException
ProcessUtil.KillException