Prozessor-Auslastung - ?

Q

Quantomas

Gast
Guten Abend,

Habe eine Frage zu einer kleinen Anwendung. Beim start werden viele Prozesse gestartet und die CPU ist auf 100%.
Habe mir etwas bei der Thread-Klasse angesehen aber bin mir nicht sicher wie man das verbessern könnte.
Das Programm müsste in Echtzeit die Tasks kontrollieren und wenn der entsprechende Task auftaucht eine Aktion durchführen.

Java:
import java.util.*;
import java.io.*;

public class TaskWork {
 static Process p;
 String name;
 String TaskName;
 public static void main(String[] args) {
  new TaskWork().los();
 }
 private void los() {
  ProcessBuilder builder1 = new ProcessBuilder("cmd", "/c", "taskkill /F /IM something.exe /T");
  builder1.directory(new File("c:/windows/system32"));
  ProcessBuilder builder2 = new ProcessBuilder("cmd", "/c", "tasklist /SVC /FO LIST > test.txt");
  builder2.directory(new File("c:/windows/system32"));
  ProcessBuilder builder3 = new ProcessBuilder("cmd", "/c", "del test.txt");
  builder3.directory(new File("c:/windows/system32"));
  try {
   FileReader datei = new FileReader("tasklist-test.txt");
   BufferedReader dat_read = new BufferedReader(datei);
   name = dat_read.readLine();
   TaskName = "something.exe";
   while(name != null) {
    p = builder2.start();
    if(name == TaskName) {
     p = builder1.start();        
    }
    p = builder3.start();
   }
   dat_read.reset();
   dat_read.close();
   p = builder2.start();
  } catch (FileNotFoundException e) {System.out.println("Datei nicht gefunden!");}
    catch (Exception e) {System.out.print("Fehler: "+e.getMessage());}
 }
}

Vielen Dank
Q.
 
T

tröööt

Gast
ich rall zwar mal überhaupt nicht was du da machst ... aber die vermutung wäre das dein while-loop ein endloser loop ist ... und nirgends "blockiert" ... du also den CPU grundsätzlich mit diesem loop zumüllst ...
baue einfach mal folgende zeile mal ans ende des while-loops

[c]Thread.sleep(100);[/c]

damit gibst du für 100ms die cpu-last ab ... das sollte deine 100% auslastung wieder runter auf normalniveau bringen ...
 
S

StringUndEquals

Gast
Java:
name == TaskName

Java:
name.equals(TaskName)
 
Q

Quantomas

Gast
Guten Morgen,

Danke für die Antworten.

Habe den Stringvergleich korrigiert und die sleep() Methode eingebaut.
Es hat sich verbessert, jedoch nur die Prozesse, die konstant bleiben.
Die CPU-Auslastung ist nach wie vor ca. 100%.

Gibts noch andere Thread Methoden die man vielleicht an einem anderen Ort schreiben könnte?
Villeicht bei den Streams?

Vielen Dank
Q.
 

Ähnliche Java Themen


Oben