2012-10-24 2 views
6

안드로이드 응용 프로그램을 통해 runtime.getruntime().exec()을 사용하여 시작된 프로세스의 프로세스 ID를 얻으려면 어떻게해야합니까 ??android runtime.getruntime(). exec() get process id

여기에 문제가 있습니다. 내 UI APP에서 runtime.getruntime(). exec()를 사용하여 프로세스를 시작합니다. 내 안드로이드 UI 애플 리케이션이 아직 실행중인 경우, 프로세스를 죽일 파괴를 사용할 수 있습니다 .. 하지만 집이나 뒤로 버튼을 사용하여 애플 리케이션을 종료하고 내가 UI 애플 리케이션을 다시 열 때 프로세스 개체가 null입니다. 그래서 나는 그것을 죽일 프로세스의 PID가 필요합니다.

더 좋은 방법은이 방법이 있습니까?

답변

-3

다음을 시도해보십시오.
int p_Id = android.os.myPid(); For details

+2

myPid()는 getRuntime(). exec()를 사용하여 시작한 프로세스가 아닌 앱의 PID를 반환합니다. –

2

PID를 사용하여 프로세스를 중단 하시겠습니까? 그렇다면 Process 인스턴스에서 destroy()으로 전화하면됩니다. PID가 필요 없습니다. 이 작업을 수행하려면 getRuntime().exec() 대신 ProcessBuilder을 사용하여 프로세스를 실행해야합니다.

정말로 프로세스 ID가 필요한 경우 셸 스크립트를 사용해야 할 수 있습니다. 자바에서 AFAIK를 얻을 수있는 방법은 없습니다.

편집는 :

:

앱을 떠나는과 복귀 후 Process에 핸들을 유지할 필요가 있기 때문에, 하나 개의 솔루션은 Process를 생성합니다 클래스의 정적 멤버를 확인하는 것입니다

private static Process myProcess; 

이 회원은 ProcessBuilderstart() 전화를 걸어 돌아 오는 Process을 저장하는 데 사용합니다. 정적 멤버는 앱이 메모리에있는 한 주변에 머물러있어 보이지 않아도됩니다. 앱으로 돌아간 후에 프로세스를 종료 할 수 있어야합니다. 시스템에서 리소스를 확보하기 위해 앱을 종료 한 경우 (실행중인 경우) 자식 프로세스를 종료 할 방법이 없지만 대부분의 경우이 솔루션이 작동해야합니다.

+0

위의 문제를 설명했다 –

+0

도움을 주셔서 감사합니다 .. 지금 정적 작품 ...하지만 내 응용 프로그램이 죽으면, 나는 운명이다 :) –

0

온라인 설명서에 경고가 있지만 ActivityManager를 사용하여이 작업을 수행했습니다 ... 중요한지 확실하지 않지만 시스템 앱으로 실행하고 있습니다.

ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
int pid = 0; 
List<RunningAppProcessInfo> procInfo = am.getRunningAppProcesses(); 
for (RunningAppProcessInfo proc : procInfo) 
    if (proc.processName.indexOf("myApp") >= 0) 
     pid = proc.pid; 
6

안드로이드 java.lang.Process 구현 java.lang.ProcessManager$ProcessImpl이며 필드 private final int pid;있다. 그것은 반사에서 얻을 수 있습니다 :

public static int getPid(Process p) { 
    int pid = -1; 

    try { 
     Field f = p.getClass().getDeclaredField("pid"); 
     f.setAccessible(true); 
     pid = f.getInt(p); 
     f.setAccessible(false); 
    } catch (Throwable e) { 
     pid = -1; 
    } 
    return pid; 
} 

또 다른 방법 - 사용 toString :

public String toString() { 
     return "Process[pid=" + pid + "]"; 
    } 

당신은 출력을 구문 분석하고 반사없이 PID를 얻을 수 있습니다.

관련 문제