gpt4 book ai didi

java - 帮助在多个线程上运行 Java runtime.exec()

转载 作者:行者123 更新时间:2023-11-30 05:59:02 24 4
gpt4 key购买 nike

在我的程序中,我需要使用 java 在 Ubuntu 环境 (ntpdate) 中运行一个外部命令。目前我的代码如下所示:

    Runtime rt = Runtime.getRuntime();

byte[] readBuffer = new byte[131072];
// Exec a process to do the query
Process p = null;
try {
p = rt.exec("ntpdate -q " + ip);
} catch (Exception ex) {
ex.printStackTrace();
}

if(p!= null){
try {
Thread.sleep(1000);
} catch (Exception e) {
}

// Read the input stream, copy it to the file
InputStream in = p.getInputStream();


try {
int count = 0, rc;
while ((rc = in.read(readBuffer, count, readBuffer.length - count)) != -1) {
count += rc;
if (count >= readBuffer.length) {
p.destroy();
break;
}
}
p.destroy();
result = processOutput(readBuffer, count);

} catch (IOException ex) {
ex.printStackTrace();
}
p.destroy();

此代码需要在多个线程上同时运行,以最大限度地提高性能(我需要使用 ntpdate 测试 1.000.000 个地址的列表)。但是,它运行非常缓慢,几乎不消耗机器处理。我究竟做错了什么?我怎样才能使它更有效率?

尝试使用 .exec() 执行“dig”时会出现同样的问题,所以我怀疑这是因为调用了特定的程序。在多线程环境中使用 Runtime.exec() 是否有一些限制?

最佳答案

Java 是这里最合适的方法吗?也许这在 shell 脚本中会更好,它在后台多次调用 ntpdate?我不确定在 Java 中执行此代码片段对您有何好处。

你在用进程中的 InputStream 做什么?


一个 bash 脚本可以这样做:

for ip in #...IP list
do
ntpdate -q $ip > $ip.txt &
done

关于java - 帮助在多个线程上运行 Java runtime.exec(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3567264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com