Prozesse starten und killen

acronym

Mitglied
Hallo!

Ich experimentiere gerade wieder rum...möchte ja lernen.
ich möchte einen Prozess, oder auch spätzer mal mehrere Prozesse auslesen und mit Hilfe der Kommandozeile starten und killen.
Irgendwie klappt das aber gar nicht. Dies ist nru eine Testklasse, die Methoden sollen später von anderen Klassen benutzt werden.
Für Tips bin ich sehr dankbar.
Code:
public class ProcessView2 implements Runnable {

	public static String getProcessTable(String process) {
		try {            
			Process p = Runtime.getRuntime().exec("cmd /c tasklist /v");
			BufferedReader in = new BufferedReader(
					new InputStreamReader(p.getInputStream( )));			 			
			
			for(String pt; (pt = in.readLine()) != null;){
				//System.out.println(pt);
				if (pt.trim().contains("notepad++.exe")) {				
					System.out.println(pt);
					return "notepad++.exe";				
				}				
			}				

			in.close();        
		}        
		catch (IOException e) { 
			e.printStackTrace();         
		}        
		return  "not found";	

	}
	public static void main(String[] args){

		System.out.println(getProcessTable("process"));
	}

	public void getDestroy(){

		String pt_2 = ProcessView2.getProcessTable("process");

		try{
			if(pt_2.equals("notepad++.exe"))
			Runtime.getRuntime().exec("cmd /c taskkill / IM " + pt_2);

		}
		catch (IOException e) { 
			e.printStackTrace();         
		}		
	}

	public void run(){

		String pt_2 = ProcessView2.getProcessTable("process");

		try{
			if(pt_2.equals("not found"))
			Runtime.getRuntime().exec("cmd /c start " + pt_2);

		}
		catch (IOException e) { 
			e.printStackTrace();         
		}
	}
}

Gruß
Holger
 
Also, beschreib doch zunächst einmal, was du überhaupt vor hast. Und wo du Schwierigkeiten hast.
Irgendwie ist das alles sehr wirr.

Alles was ich bislang sagen ist, hier ist ein Logikfehler:
Code:
if(pt_2.equals("not found"))
Runtime.getRuntime().exec("cmd /c start " + pt_2);
Wenn es also getProcessTable(...) "not found" zurückgibt, möchtest du "cmd /c start not found" ausführen - glaub nicht, das du das so willst ;).
 
Hallo!

Ich experimentiere gerade wieder rum...möchte ja lernen.
ich möchte einen Prozess, oder auch spätzer mal mehrere Prozesse auslesen und mit Hilfe der Kommandozeile starten und killen.
wenn du selbige mit java startest, dann kannste sie auch wieder killen (Threads), aber wenn du FREMDE Prozesse killen willst, dann kann es sein dass der PC abstürzt, kein Programm sollte fremde Prozesse killen können, ausser es ist wirklich notwendig. Besser die Finger davon lassen, nicht wenige Virenscanner würden auf diese Routine anspringen.
 
Hi,

Du brauchst tatsächlich nicht unbedingt über das Betriebssystem die Programme starten und beenden sondern kannst diese auch direkt mit Java starten, überwachen und wieder beenden. Der Vorteil ist, dass du bei sagen wir 5 gestarteten Notepad nicht den falschen erwischen und beenden kannst.

Java:
import java.io.IOException;
import java.util.concurrent.TimeUnit;

public class ProcBuilder {
	
	public static void main(String [] args){
		
		ProcessBuilder b = new ProcessBuilder("notepad","D:\\todo.txt");
		try {
			//Prozess starten
			Process proc = b.start( );
			// 10 Sekunden warten
			Thread.sleep(TimeUnit.SECONDS.toMillis(10));
			//Prozess beenden
			proc.destroy( );
			int exitValue = proc.waitFor( );
			System.out.println("Process terminated: " + exitValue);
		}
		catch (IOException e) {
			e.printStackTrace( );
		}
		catch (InterruptedException e) {
			e.printStackTrace( );
		}
	}
}
 
Hallo!

Danke für die Antworten, jetzt muss ich mir etwas überlegen ... :confused:
Funktioniert wohl nicht immer alles so wie man es sich wünscht ...
Der Hinweis mit dem Virenscanner macht mich nachdenklich, wobei ich auf meinem Rechner killen und starten konnte, trotz Virenscanner.
Es geht schon in erster Linie um fremde Prozesse.

Gruß
Holger
 
Zurück