Runtime.getRuntime().exec(cmd)使用不当会引起java.io.IOException: Too many open files吗
时间: 2024-02-10 15:56:42 浏览: 28
是的,如果在Java程序中频繁地调用 `Runtime.getRuntime().exec(cmd)` 执行外部命令,而没有正确地关闭这些子进程,就会导致文件句柄被耗尽,从而抛出 `java.io.IOException: Too many open files` 异常。
为了避免这种情况发生,应该在每次执行完 `cmd` 命令后,使用 `Process.destroy()` 方法来关闭子进程,释放资源。另外,还可以通过增加系统的最大文件句柄数来解决这个问题。在Linux系统中,可以使用 `ulimit` 命令来查看和设置最大文件句柄数。
相关问题
android runtime.exec 权限,Android Runtime.getRuntime().exec(“su”)java.io.IOException:权限被拒绝...
在 Android 中,执行命令需要相应的权限。在你的情况下,你需要使用 `android.permission.ACCESS_SUPERUSER` 权限才能执行 `su` 命令。
要在你的应用程序中请求超级用户权限,你需要在 AndroidManifest.xml 文件中添加以下行:
```
<uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
```
请注意,这个权限只有在设备被 root 后才能使用。如果设备没有被 root,你不能使用 `su` 命令来获得超级用户权限。
如何使用Runtime.getRuntime().exec调用cmd求解1+1
在Java中,可以使用以下方式使用Runtime.getRuntime().exec调用cmd求解1+1:
```
try {
Process process = Runtime.getRuntime().exec("cmd /c 1+1");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
process.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
```
这段代码会在控制台输出2,也就是求解1+1的结果。