【问题标题】:Kill Linux process just ran杀死刚刚运行的 Linux 进程
【发布时间】:2012-04-07 20:45:17
【问题描述】:
tail -f test.log

上面的命令将跟踪在后台运行进程的日志。我怎样才能杀死那个特定的进程?

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

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

谢谢

【问题讨论】:

    标签: java process logging kill tail


    【解决方案1】:

    当您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 不同的是,上面的代码不处理从头开始重写的文件,而不是附加到文件,但你可以解决这个问题。

    【讨论】:

      【解决方案2】:

      您可以尝试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()
      

      【讨论】:

        【解决方案3】:

        嗯,你可以的

        ps -ef | grep java
        

        找到所有的java进程,然后杀死你想要的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-02-11
          • 1970-01-01
          • 1970-01-01
          • 2018-10-14
          • 1970-01-01
          • 1970-01-01
          • 2011-03-02
          • 2015-06-08
          相关资源
          最近更新 更多