2012-10-24 21 views
6

runtime.getruntime().exec()を使用して起動したプロセスのプロセスIDをアンドロイドアプリケーションで取得する方法はありますか?android runtime.getruntime()。exec()プロセスIDを取得

ここが問題です。私はUIUI APPからruntime.getruntime()。exec()を使用してプロセスを開始します。もし私のアンドロイドのUIアプリがまだ実行されていれば、私はプロセスを殺すためにdestroyを使うことができます。 しかし、私は自宅や戻るボタンを使用してアプリケーションを終了し、私は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が必要な場合は、シェルスクリプトを使用する必要があります。 JavaからAFAIKを取得する方法はありません。

EDIT

アプリを離れると、それに戻った後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を取得することができます。

関連する問題