Java 调用Runtime.getRuntime().exec()是连续执行OS命令的正确方法吗?
希望使用Java例程在Linux上连续执行OS命令 下面是执行“ls/tmp/MyNewFile.tx”并运行的示例。最终,它将在循环中持续运行,直到文件出现 这只是一个示例,因为执行的OS命令会有所不同,但在每种情况下,代码都会不断循环 令人担忧的是,此进程将持续运行,从而导致在操作系统级别快速创建和销毁进程。对这种情况有什么担心吗 有没有更有效或更恰当的方法来实现这一点Java 调用Runtime.getRuntime().exec()是连续执行OS命令的正确方法吗?,java,runtime,Java,Runtime,希望使用Java例程在Linux上连续执行OS命令 下面是执行“ls/tmp/MyNewFile.tx”并运行的示例。最终,它将在循环中持续运行,直到文件出现 这只是一个示例,因为执行的OS命令会有所不同,但在每种情况下,代码都会不断循环 令人担忧的是,此进程将持续运行,从而导致在操作系统级别快速创建和销毁进程。对这种情况有什么担心吗 有没有更有效或更恰当的方法来实现这一点 import java.io.BufferedReader; import java.io.InputStream; im
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class MyTest
{
public static void main(String[] arguments)
{
try
{
String[] cmd_check = {
"/bin/sh",
"-c",
"ls /tmp/MyNewFile.tx"
};
/*************Create LOOP to continually check for a file****************/
Process p = Runtime.getRuntime().exec(cmd_check);
System.out.println(p.toString());
InputStream stdIn = p.getInputStream();
InputStreamReader isr = new InputStreamReader(stdIn);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<OUTPUT>");
while ((line = br.readLine()) != null)
System.out.println(line);
System.out.println("</OUTPUT>");
int exitVal = p.waitFor();
System.out.println("Process exitValue: " + exitVal);
}
catch (Exception e)
{
}
}
}
导入java.io.BufferedReader;
导入java.io.InputStream;
导入java.io.InputStreamReader;
公共类MyTest
{
公共静态void main(字符串[]参数)
{
尝试
{
字符串[]cmd_check={
“/bin/sh”,
“-c”,
“ls/tmp/MyNewFile.tx”
};
/*************创建循环以持续检查文件****************/
进程p=Runtime.getRuntime().exec(cmd\u检查);
System.out.println(p.toString());
InputStream stdIn=p.getInputStream();
InputStreamReader isr=新的InputStreamReader(标准输入);
BufferedReader br=新的BufferedReader(isr);
字符串行=null;
System.out.println(“”);
而((line=br.readLine())!=null)
系统输出打印项次(行);
System.out.println(“”);
int exitVal=p.waitFor();
System.out.println(“进程exitValue:+exitVal”);
}
捕获(例外e)
{
}
}
}
你到底想做什么?为什么不直接使用Java文件系统操作呢?但是在循环中运行代码应该没有什么错(确保Process.waitFor()意味着Java IO流的进程是关闭的)将其视为一个辅助进程,需要立即知道何时创建某个目录和/或文件以执行某些工作。该方法比创建一个新的shell要高效得多。和Files.exists将在所有操作系统上运行。好的,谢谢您提供的信息。主要目的是了解在循环中持续执行代码是否会导致任何问题,因为它会快速创建和终止进程。