相关疑难解决方法(0)

如何将Process Builder的输出重定向到字符串?

我正在使用以下代码来启动进程构建器.我想知道如何将其输出重定向到String.

ProcessBuilder pb = new ProcessBuilder(System.getProperty("user.dir")+"/src/generate_list.sh", filename);
Process p = pb.start();
Run Code Online (Sandbox Code Playgroud)

我试过使用,ByteArrayOutputStream但它似乎没有用.

java stream processbuilder

56
推荐指数
7
解决办法
8万
查看次数

Process Builder waitFor()问题和打开文件限制

我继承了一些代码:

Process p = new ProcessBuilder("/bin/chmod", "777", path).start();
p.waitFor();
Run Code Online (Sandbox Code Playgroud)

基本上,存在一些古老且高度基于巫术的原因,用于将键/值对作为文件存储在磁盘上.我真的不想进入它.

但是,我留下了一堆IO异常:

Exception :Cannot run program "/bin/chmod": java.io.IOException: error=24, Too many open files
Message: Cannot run program "/bin/chmod": java.io.IOException: error=24, Too many open files
Run Code Online (Sandbox Code Playgroud)

一堆我的意思是在1万亿的领域

我感觉waitFor调用是阻止这些进程等待进程完成它并退出,但我认为chmod在文件实际关闭之前返回结果.有谁知道这是否会导致这些例外?

我的另一个倾向是数千个文件的打开和关闭在java端没有快速发生,并且还有其他事情发生,可能是某种形式的文件缓冲区没有被清除掉正在调用fw.close().

我对java很新,这是一个让我难过的地狱怪异的东西.(很高兴应用程序仍以某种方式运行..吐出一个非常大的日志文件后)

任何人都可以想办法解决这个问题,清除缓冲区或增加文件打开限制,以便jvm可以跟上自己(假设这是问题)

java processbuilder java-io

9
推荐指数
2
解决办法
3万
查看次数

是否需要手动销毁和关闭 java.lang.Process 的打开流?

我有以下代码:

\n
Process proc;\ntry\n{\n    ProcessBuilder procBuilder = new ProcessBuilder(/* some args */);\n    proc = procBuilder.start();\n    if (proc.waitFor(30000, TimeUnit.MILLISECONDS))\n    {\n        //Etc...\n    }\n    else\n    {\n        //Handle it\n    }\n}\ncatch (InterruptedException ie)\n{\n    currentThread().interrupt();\n}\nfinally\n{\n    //What goes here?\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我试图找到一些来源来指示是否需要调用proc.destroy()\xc2\xa0(我应该isAlive()在调用 destroy 之前检查吗?),并手动关闭其输入/输出/错误流,但无济于事。据我所知,甚至官方文档也没有明确说明这一点。

\n

当我完成生成的进程时,是否有必要执行这些操作,或者只是良好的做法?

\n

java inputstream outputstream process

5
推荐指数
1
解决办法
941
查看次数