杀掉Linux进程就跑了

时间:2012-03-23 09:25:26

标签: java process logging kill tail

tail -f test.log

上面的命令会拖尾运行后台进程的日志。我怎么能杀死那个特定的过程?

我可以在shell上按“Ctrl-Z”,但我使用Java运行该命令,需要终止该过程。

对此的任何帮助将不胜感激。

谢谢

3 个答案:

答案 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,但这会终止所有正在运行的尾部进程。

更好的方法是使用返回的Processhttp://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进程,然后杀掉你想要的那个。