2011-12-24 10 views
12

私はAndroidアプリケーションをコーディングしています。今私は、アプリケーションがプロセスを殺すはずの部分に行きます。しかし私はそのフルネームやそのPIDを知らない。私が知っているコマンド:フルネームを知らずにプロセスを終了させるプロセスのPIDを取得する

android.os.Process.killProcess(Pid) 

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

をしかし、私の問題は、私は、プロセスの完全な名前がわからないということです。

それはそう、プロセスは/data/data/com.something.something/mybinary

ですが、それは私が「これのために

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

のようなコマンドを使ってすることができます実行している

をcom.something.somethingようなネイティブコードのプロセスではありません

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

答えて

7

使用可能:

実行中のプロセスのパッケージ名をすべて取得し、どちらを削除するかを確認して、そのプロセスがservice.pidで取得するプロセスIDを選択できます。

およびコール:

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

しかし、どのようにマネージャオブジェクトを初期化するのか分かりませんでした。 –

+1

ActivityManagerマネージャ=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); これは初期化方法です。 – AAnkit

+0

/data/data/com.something.something/mybinaryからプロセスを取得しない –

-2

あなたはこのようになめらか操作を行うことができます。

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); 
    //... 
} 

次にあなたがSB解析し、あなたのプロセスのpidを取得することができます。

+0

私のプロセスが実行されているかどうかをチェックするにはこのメソッドを使います: if(sb.toString()。indexOf( "data/data/myprocess")> 0) しかし、どのようにsbを解析して私は、コードを追加しました – user1114653

+0

プロセスのpidが、私は、pidはプロセス名の後ろにあることを知っているが、どのように私はそれを抽出することができます。私はそれがpidはそれ android.os.Process.killProcess(PID)とそれを殺すためにしようとした整数が、イム作ら抽出してしまった – Yury

+0

MHH。 それは働いていませんでした。イムで自分自身を殺すとき: android.os.Process.killProcess(android.os.Process.myPid()); 他はないのPIDと、それはしかし、動作します:S – user1114653

1

あなたのプロセス名がトップの出力を解析することによって実行されているネイティブプロセスの「/data/data/com.something.something/mybinary」 最初のgetプロセスIDで、その後android.os.Process.killProcess(PID)を使用します私は同じproblem.Finallyだ

   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()); 
    } 
} 

}

0

、私はAndroidのJavaコードで私のバイナリプロセスを強制終了する方法を見つけます。 まず、txtファイルにプロセス情報を書く:あなたはあなたのプロセスのpidを持っている

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

:あなたのような文字列を得ることができ、このファイルを読み取るためのJavaコードを使用し、

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

、その後、 javaでkillコマンドを実行します。

関連する問題