import java.io.*;
import java.io.IOException;
import java.util.Scanner;
public class AutoStart{
public static void main(String[] args){
while(true){
Runtime r = Runtime.getRuntime();
try{
Process p = r.exec("ps -ef >> services.txt");
try{
p.waitFor();
} catch(InterruptedException e){
e.getStackTrace();
}
Scanner txtscan = new Scanner(new File("services.txt"));
int running = 0; //0 means not running and 1 means running
while(txtscan.hasNextLine()){
String str = txtscan.nextLine();
if(str.indexOf("red5") != -1){
running = 1;
}
}
if(running == 0){
//red5 is not running so start it now
//code to start it goes here
}
//at the end remove services.txt file
//code to remove that file goes here.
} catch(IOException e){
e.getStackTrace();
}
try {
Thread.sleep(1000); //1000 milliseconds is one second.
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
}
В строке 10 Я пытаюсь создать текстовый файл, содержащий список всех запущенных программ, но моя java-программа не может его создать.Программа Java не может выполнять команду терминала
Эта программа не может создать файл services.txt, и я не получаю никакой ошибки, поэтому я смущен в чем проблема. Можете ли вы помочь мне разобраться с проблемой? Спасибо.
Вам нужны только services.txt, чтобы передавать данные из вывода команды в вашу программу Java? Лучше использовать p.getInputStream() или p.getErrorStream() вместо –
Настоятельно рекомендуется использовать полное имя пути (/ bin/ps), поскольку настройка PATH не выполняется. Перенаправление тоже не будет работать. Класс ProcessBuilder предоставляет способы чтения или перенаправления вывода программы. – laune
1. Не используйте Runtime.exec(), используйте ProcessBuilder. 2. либо один из них НЕ выдаст команду в интерпретаторе оболочки, поэтому ваша команда не будет работать ('>> xxx' интерпретируется интерпретатором команд, но здесь это аргументы команды' ps', которая , конечно, ничего не знает о них.). – fge