我试图在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:“错误的文件号”。
我的应用程序必须执行几个本机程序,但始终使用相同的过程。
有人知道为什么这行不通吗?

最佳答案

请注意,该外壳程序不是公共SDK的一部分(请注意,SDK文档中的任何地方均未记录该外壳程序),因此该代码实际上依赖于私有API。

这也使您脱离正常的应用程序模型-我们无法保证您已分叉且不受平台管理的流程将发生什么。它可能随时被杀死。

与执行命令在您自己的进程中执行的操作相比,这也是一种非常低效的执行方法。并且为命令启动一个单独的进程不会让它做更多的事情,因为它仍然作为您的uid运行。

所以基本上...对于99.99%的应用程序,请不要这样做。如果您正在编写一个终端应用程序...好吧,好吧,无论如何,只有极客才会关心它,并且它作为您的uid运行时并没有多大用处,但是好吧。但是,否则,请不要。 :)

09-30 14:20
查看更多