tail -f test.log
上面的命令会拖尾运行后台进程的日志。我怎么能杀死那个特定的过程?
我可以在shell上按“Ctrl-Z”,但我使用Java运行该命令,需要终止该过程。
对此的任何帮助将不胜感激。
谢谢
答案 0 :(得分:3)
当您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
不同,上面的代码不处理从头开始重写的文件而不是附加到文件,但你可以修复它。
答案 1 :(得分:1)
您可以尝试使用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()
答案 2 :(得分:0)
嗯,你可以做到
ps -ef | grep java
找到所有java进程,然后杀掉你想要的那个。