Java 调用Runtime.getRuntime().exec()是连续执行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

希望使用Java例程在Linux上连续执行OS命令

下面是执行“ls/tmp/MyNewFile.tx”并运行的示例。最终,它将在循环中持续运行,直到文件出现

这只是一个示例,因为执行的OS命令会有所不同,但在每种情况下,代码都会不断循环

令人担忧的是,此进程将持续运行,从而导致在操作系统级别快速创建和销毁进程。对这种情况有什么担心吗

有没有更有效或更恰当的方法来实现这一点

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将在所有操作系统上运行。好的,谢谢您提供的信息。主要目的是了解在循环中持续执行代码是否会导致任何问题,因为它会快速创建和终止进程。