我正在尝试在 Android 上执行此操作:
Process p = Runtime.getRuntime().exec("sh");
DataOutputStream out = new DataOutputStream(p.getOutputStream());
out.writeBytes("something useful\n");
out.close();
p.waitFor();
out = new DataOutputStream(p.getOutputStream());
out.writeBytes("something useful\n");
out.close();
p.waitFor();
第二次执行out.writeBytes(); ,我得到一个java IOException:“错误的文件编号”。 我的应用程序必须执行多个 native 程序,但始终使用相同的进程。 有人知道为什么这不起作用吗?
最佳答案
请注意,shell 不是公共(public) SDK 的一部分(请注意,SDK 文档中的任何地方都没有记录它),因此这段代码实际上依赖于私有(private) API。
此外,这会使您处于正常应用程序模型之外——我们无法保证您已 fork 且不受平台管理的进程会发生什么情况。它随时可能被杀死。
与执行命令在您自己的进程中执行的操作相比,这也是一种非常低效的执行方式。并且为一个命令启动一个单独的进程不会让它做任何你能做的事情,因为它仍然作为你的 uid 运行。
所以基本上...对于 99.99% 的应用,请不要这样做。如果您正在编写终端应用程序……好吧,好吧,无论如何只有极客才会关心它,而且它不会有太大用处,因为它作为您的 uid 运行,但是没关系。但除此之外,请不要。 :)
关于Java - (android) 在刷新其 OutputStream 后重用一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3591000/