Есть ли способ периодически запускать команду Unix (ps
в моем случае) в Java? Цикл я написал:Repeat Unix Command в Java
while(this.check)
{
try
{
ProcessBuilder pb = new ProcessBuilder("ps");
Process proc;
System.out.println(" * * Running `ps` * * ");
byte[] buffer;
String input;
proc = pb.start();
BufferedInputStream osInput =
new BufferedInputStream(proc.getInputStream());
//prints 0 every time after the first
System.out.println(osInput.available());
buffer = new byte[osInput.available()];
osInput.read(buffer);
input = new String(buffer);
for(String line : input.split("\n"))
{
if(line.equals(""))
continue;
this.handlePS(line);
}
proc.destroy();
try
{
Thread.sleep(10000);
}
catch (InterruptedException ie)
{
ie.printStackTrace();
}
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
не работает. Он работает отлично в первый раз, но после этого из входного потока поступает 0 байтов. Я бы попробовал команду watch
, но в этом окне Solaris этого нет. Я не могу использовать задание cron, так как мне нужно знать, есть ли PID в Java-приложении. Есть идеи?
Заранее спасибо.
EDIT: не может использовать хрон
EDIT: Я готовлю новую Thread
одного и того же типа (PS) после того, как он приходит к выводу, так что я определенно делает новую ProcessBuilder каждый раз.
EDIT: Я положил цикл, который не работал, поскольку он вызвал путаницу.
Я не вижу петлю. –
верните петлю во избежание путаницы – geowa4