【发布时间】:2012-04-07 20:45:17
【问题描述】:
tail -f test.log
上面的命令将跟踪在后台运行进程的日志。我怎样才能杀死那个特定的进程?
我可以在 shell 上按“Ctrl-Z”,但我正在使用 Java 运行该命令并且需要终止该进程。
对此的任何帮助将不胜感激。
谢谢
【问题讨论】:
标签: java process logging kill tail
tail -f test.log
上面的命令将跟踪在后台运行进程的日志。我怎样才能杀死那个特定的进程?
我可以在 shell 上按“Ctrl-Z”,但我正在使用 Java 运行该命令并且需要终止该进程。
对此的任何帮助将不胜感激。
谢谢
【问题讨论】:
标签: java process logging kill tail
当您start a subprocess with Java 时,您将返回与正在运行的进程对应的a Process object。您可以使用destroy() method on the Process object 杀死正在运行的命令。
所以你可以这样开始:
Process p = Runtime.getRuntime().exec(new String[] {"tail","-f","test.log"});
然后杀死它:
p.destroy();
如果您只是读取添加到文件中的新行,您是否考虑过在 Java 中本地执行此操作?读取文件非常简单:
try {
BufferedReader input = new BufferedReader(new FileReader("tail.log"));
while (true) {
String line;
while ((line = input.readLine()) != null) {
//You'll probably want to do something other than println()
System.out.println(line);
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
break;
}
}
input.close();
}
catch (IOException ioe) {
//Handle this
}
您可能希望在另一个 Thread 中运行它。与tail -f 不同的是,上面的代码不处理从头开始重写的文件,而不是附加到文件,但你可以解决这个问题。
【讨论】:
您可以尝试killall tail,但这会杀死所有正在运行的尾进程。
更好的方法是使用返回的Process:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Process.html
一旦你拥有
Process child = Runtime.getRuntime().exec("tail -f test.log");
你可以
child.destroy()
【讨论】:
嗯,你可以的
ps -ef | grep java
找到所有的java进程,然后杀死你想要的。
【讨论】: