2011-01-05 15 views
4

私はプログラムでプログラムを開いてアプリケーションを閉じる方法を見つけようとしています。私は簡単しかしプロセスIDはどのようにしてjavaで取得できますか?

Runtime.getRuntime().exec(new String[] {"open", "<path to application>"}); 

、私はそれがライン

Runtime.getRuntime().exec(new String[] {"kill", "<process id#>"}); 

を使用することで閉じるように見つけることができる唯一の方法を使用してアプリケーションを起動することができ、私はID#その他を取得するために、とにかく見つけることができません手動で端末を開き、トップを使って#を見つけるよりも。このIDを取得するためのプログラム的な方法がある場合や、アプリケーションのオープンとクローズに関するより良い方法があれば、それについて聞きたいと思います。

おかげ

答えて

3

サブプロセスを開始するためにjava.lang.ProcessBuilderを使用してください。返されたProcessオブジェクトにはdestroy()メソッドがあり、それを殺すことができます。

+0

これはアプリケーションの起動には問題ありませんが、destroy()を呼び出した後でも実行され続けます –

+0

サブプロセスがシグナルをトラップして無視していますか? (私はあなたが元の質問の言葉に基づいて* nixでWindowsではないと仮定します)。また、あなたはサブプロセスで何を実行していますか? –

0

これはおそらく、あなたがexec(...)の結果、プロセスオブジェクトへのハンドルを取得...(による経過時間に)元のポスターにちょうど完全性のためにもう

関係ありませんコマンド:

Process myProcess = Runtime.getRuntime().exec("mybin"); 

あなたはその後、destroy()で任意の後の時点で殺すことができます。

myProcess.destroy(); 

注:これは似ているかもしれませんがジムが説明していたものの、ProcessBuilderを使用していないものに変更しました。

+0

'ProcessBuilder'は長年にわたって存在しています。 *そうでない*の理由がない限り、それを使用してください。 –

+1

@AndrewThompsonあなたは本当に正しいです;-)。 'getRuntime()。exec()'は私が過去に使っていたことですが、 'ProcessBuilder'は一般的なルールです。 – fcarriedo

関連する問題