JavaのUnixコマンド(私の場合はps
)を定期的に実行する方法はありますか?私が書いたループ:JavaでUnixコマンドを繰り返す
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のボックスにはありません。 PIDがJavaアプリケーションにあるかどうかを知る必要があるので、私はcronジョブを使用できません。何か案は?
ありがとうございます。
EDIT:それが終了した後、私は同じタイプ(PS)の新しいThread
を作ってるんだ、私は間違いなく新しいProcessBuilderを毎回作っています:
EDIT cronジョブを使用することはできません。
編集:混乱の原因となったので、私はループしませんでした。
私はループが表示されません。 –
混乱を避けるためにループを入れ直してください – geowa4