2017-01-25 2 views
1

저는 위성 모뎀을 통해 통신을 수행하는 Android 프로젝트에 있습니다.Android - ppid = 1로 프로세스를 죽이는 방법

android를 통해 연결하려면 모뎀에 pppd 명령을 실행해야합니다.

이 명령은 bash를 통해 수행했습니다. 안드로이드는이 프로세스를 생성 어떤 순간에

process = Runtime.getRuntime().exec(new String[]{"su", "root", "-c", "/data/local/android_connect.sh", "&> /mnt/sdcard/Download/log.txt"}); 

PPID = 1

이 내가 다음 명령

android.os.Process.killProcess(pidProcess); 
     if (process != null) 
      process.destroy(); 

을 실행하여 프로세스를 종료 할 수없는 일이 그것은 죽일 수 있나요 PPID = 1에서 android를 통한 프로세스?

+0

왜 PID로 죽이지 않습니까? – heemayl

답변

3

좋은 생각은 아니지만 Runtime.getRuntime().exec("kill -9 " + PID);으로 전화를 걸 수 있습니다. killProcess 대신 killBackgroundProcesses으로 문의하십시오. killProcess은 앱 UID와 다른 UID를 가진 프로세스를 죽이는 것을 허용하지 않으며, killBackgroundProcesses은이를 처리 할 수 ​​있습니다.

앱에 android.permission.ACCESS_SUPERUSER, android.permission.KILL_BACKGROUND_PROCESSESandroid.permission.GET_TASKS과 같은 권한이 있어야합니다.

+1

아마도'-9'는 필요하지 않습니다. 부모 프로세스가'init'이라는 사실은 아무런 차이가 없어야합니까? – slezica

+1

예, 실제로 차이가 없어야한다고 생각합니다. 그러나 저자가 프로그램 종료에 문제가 있다면 SIGKILL이 도움이 될 수 있습니다. –

+0

** killBackgroundProcess **의 차이점은 무엇입니까? –

1

PID=1은 프로세스 관리자입니다. 커널 바로 다음에서 실행되며, 프로세스를 종료하면 모든 프로세스가 종료됩니다. 그렇게 권장하지는 않지만 결정을 내리면 다음을 시도해 볼 수 있습니다.

Runtime.getRuntime().exec("kill -9 " + PID); 
+0

이 호출 후에도 여전히 가비지 수집이 수행됩니까? –

관련 문제