Процесс Kill Linux только что запустился - PullRequest
2 голосов
/ 23 марта 2012
tail -f test.log

Команда выше будет вести журнал, который запускает процесс за сценой. Как я могу убить этот конкретный процесс?

Я могу нажать «Ctrl-Z» на оболочке, но я запускаю эту команду, используя Java, и мне нужно остановить этот процесс.

Любая помощь по этому вопросу будет высоко ценится.

спасибо

Ответы [ 3 ]

3 голосов
/ 23 марта 2012

Когда вы запускаете подпроцесс с Java , вы получаете a Process объект , соответствующий запущенному процессу.Вы можете использовать метод destroy() для объекта Process , чтобы убить запущенную команду.

Таким образом, вы начнете ее с:

  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 голос
/ 23 марта 2012

Вы можете попробовать для 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()
0 голосов
/ 23 марта 2012

Ну, вы можете сделать

ps -ef | grep java

, чтобы найти все процессы Java, а затем просто убить тот, который вы хотите.

...