2011-12-24 16 views
12

Bir Android uygulamasını kodluyorum. Şimdi uygulamanın bir süreci öldürmesi gereken yere gidiyorum. Ama onun tam adını veya PID olduğunu bilmiyorum. Ben komutları bilin:Tam adını bilmeden, onu öldürmek için bir işlemin PID'sini alın

android.os.Process.killProcess(Pid) 

ve

android.os.Process.getUidForName("com.android.email") 

Ama benim sorunum ben sürecinin tam adını bilmiyorum olmasıdır. '

com.something.something gibi

Bir yerel kod süreci, bu yüzden bir şey değil süreç /data/data/com.something.something/mybinary

ama çünkü bu bir

/data/data/com.something.something/mybinary -a 123 -b 456 

gibi komutlarla çalışıyor t kullan

android.os.Process.getUidForName("/data/data/com.something.something/mybinary") 

cevap

7

Şunları da kullanabilirsiniz:

ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 
List<RunningAppProcessInfo> services = manager.getRunningAppProcesses(); 
String service1name = services[1].processName; 

Sen, çalışan tüm sürecin paket adları almak, öldürülecek service.pid tarafından bu süreç olsun işlem kimliği seçmek istiyorum hangisini kontrol edebilirsiniz.

Ve çağrı:

android.os.Process.killProcess(service.pid); 
+0

Ancak yönetici nesnesini nasıl başlatırsınız, anlayamadım. –

+1

ActivityManager yöneticisi = (ActivityManager) getSystemService (Context.ACTIVITY_SERVICE); Bu, nasıl başlattığınız yoludur. – AAnkit

+0

/data/data/com.something.something/mybinary –

-2

Böyle smth yapabilirsiniz:

Process p = Runtime.getRuntime().exec("ps"); 
p.waitFor(); 
StringBuffer sb = new StringBuffer(); 
InputStreamReader isr = new InputStreamReader(p.getInputStream()); 
int ch; 
char [] buf = new char[1024]; 
while((ch = isr.read(buf)) != -1) 
{ 
    sb.append(buf, 0, ch); 
} 
HashMap pMap = new HashMap<String, Integer>(); 
String [] processLinesAr = sb.toString().split("\n"); 
for(String line : processLinesAr) 
{ 
    String [] comps = line.split("[\\s]+"); 
    if(comps.length != 9) 
    return;   
    pid = Integer.parseInt(comps[1]); 
    packageName = comps[8]; 
    pMap.put(packageName, pid); 
    //... 
} 

Sonra sb ayrıştırmak ve sürecin pid alabilirsiniz.

+0

yuri im kontrol etmek: (sb.ToString() indexOf ("Veri/veri/myprocess")> 0.) ama nasıl ben almak için sb ayrıştırmak eğer sürecin pid i pid süreç ismin arkasına olduğunu biliyoruz ama nasıl i kodunu ekledikten – user1114653

+0

bunu elde edebilirsiniz. – Yury

+0

MHH ben pid bir tamsayı yapılmış ama im android.os.Process.killProcess (pid) ile öldürmeye çalışan çıkarılan var; ama işe yaradı etmedi. im kendimi öldürme zaman: android.os.Process.killProcess (android.os.Process.myPid()); Başka değil PID ile o ama çalışır: S – user1114653

1

sizin işlem adı android.os.Process.killProcess (PID) üst çıktısını ayrıştırma ve daha sonra kullanmak tarafından yerli işlemin çalıştığını '/data/data/com.something.something/mybinary' ilk olsun işlem kimliği olduğu

   import org.apache.commons.exec.*; 
      import java.io.IOException; 
     public class NativeKillerRunnable implements Runnable { 
      private static final Logger logger = LoggerFactory.getLogger(NativeKillerRunnable.class); 
      @Override 
       public void run() { 
     String commandtoexec = "top -n 1 -m 100"; 
     CommandLine cmdLine = CommandLine.parse(commandtoexec); 
     DefaultExecutor executor = new DefaultExecutor(); 
     try { 
      PumpStreamHandler psh = new PumpStreamHandler(new LogOutputStream() { 
      @Override 
      protected void processLine(String s, int i) { 
       s = s.trim(); 
     //check for name of your binary process 
       if(s.contains("mybinary")) 
       { 
        String[] strings = s.split(" "); 
        android.os.Process.killProcess(Integer.parseInt(strings[0])); 
        logger.info("killed mybinary process with pid = "+strings[0]); 
       } 
      } 
     }); 
     executor.setStreamHandler(psh); 
     executor.execute(cmdLine); 
    } catch (ExecuteException executeException) { 
     logger.error("caught exception while killing mybinary process "+executeException.getMessage()); 
    } 
} 

} aynı problem.Finally var

0

, ben robot java kodu ile benim ikili süreci öldürmek için bir yöntem bulmak. , bir txt dosyasına işlem bilgi yazmak ilk:

root 17857 16409 87568 14880 ffffffff aaf0ec68 R /data/data/com.something.something/mybinary 

Eğer sürecin pid var: Bu dosyayı okumak için java kodu kullanmak

echo `ps | grep /data/data/com.something.something/mybinary` > /sdcard/pid.txt 

sonra, sizin gibi dize alabilir java'da kill komutunu yürütün.

İlgili konular