2017-03-09 8 views
0

使用せずに、与えられたプロセスのPIDを取得できます:私は方法を見つけることができませんでしたWindowsマシン上のJavaプログラムは、私は次のコマンドラインでウィンドウ内の特定のJavaプロセスを殺したいJNA

taskkill /f /pid <my_pid> 

JNA APIを使わずにウィンドウに自分のプロセスのpidを取得する。 JNAを使用するいくつかの回答が見つかりましたが、私はより簡単な解決策を探しています。続き

は、私は(動作しない)を使用するJavaコードです:

Field f = p.getClass().getDeclaredField("handle"); 
    f.setAccessible(true); 
    long handle = f.getLong(p); 
    System.out.println("Kill pid " + handle); 
+0

また、http://stackoverflow.com/questions/8435952/how-to-get-pid-from-command-line-filtered-by-username-and-imagename –

答えて

1

は最後に、私は解決策を見つけました。 私はwmic process get commandline, processid windowsコマンドを使用してPIDを取得しました。私Killer.javaが続き

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 

public class Killer { 


public static void main(String[] args) throws Exception { 



    ArrayList<String> cmds = new ArrayList<String>(); 

    cmds.add("wmic"); 
    cmds.add("process"); 
    cmds.add("get"); 
    cmds.add("commandline,processid"); 

    ProcessBuilder pb = new ProcessBuilder(cmds); 

    Process p = pb.start(); 

    //p.waitFor(); 


    BufferedReader rd = new BufferedReader(new InputStreamReader(p.getInputStream())); 

    String line; 
    int pid=0; 

    while((line = rd.readLine()) != null) 
    { 
     if(line.contains(args[0]) && !line.contains("Killer")) 
     { 

      System.out.println("OK" + line); 
      String[] split = line.split(" "); 
      pid=Integer.parseInt(split[split.length - 1]); 

     } 
     else 
     { 
      //System.out.println(" " + line); 
     } 
    } 

    cmds = new ArrayList<String>(); 

    System.out.println("Kill pid " + pid); 
    cmds.add("taskkill"); 
    cmds.add("/T"); 
    cmds.add("/F"); 
    cmds.add("/PID"); 
    cmds.add("" + pid); 
    pb = new ProcessBuilder(cmds); 
    pb.start(); 
}    
} 

は、それはあなたを助けることを願っています。

0

発見したように、コマンドラインwmicでWMIを使用できますが、use the tasklist commandでも可能です。

出力をフィルタリングするにはいくつかのスイッチが必要です。

+0

も参照してください。あなたが殺さなければならないリスト? – Hakim

+0

WMIの場合と同じように、ImageName(プログラム、 'tasklist.exe'など)または他のフィールドで検索します。私は構文を示す元の投稿へのコメントに特定の例を掲載しました。 'tasklist'はそれを表示するだけですが、' taskkill'コマンドで直接フィルタリングするのに似た構文(わずかに異なるスイッチ)を使うことができます。他のフィールドと一致する場合は、PIDに一致する必要はありません。 –

関連する問題