从ANDROID Runtime.GetRuntime()。exec到STDOUT会发生什么?

时间:2016-09-30 12:34:47

标签: android bash

我在根管理平板电脑上运行了一些在ANDROID 4.1下运行的代码: -

String[] command = { "/system/xbin/su", "-c", "/data/mystuff/bin/init.sh" }; 
Process proc = Runtime.getRuntime().exec(command); 
proc.waitFor(); 

想法是运行Linux初始化脚本。脚本看起来有点像......

#!/system/bin/sh
/data/mystuff/bin/script1 &
/data/mystuff/bin/script2 &
/data/mystuff/bin/script3 &

脚本都是bash脚本,它们永远循环做有趣的事情。但是,当我从adb shell运行“ps”时,我只能看到script1和script3 - script2已经神秘地消失了。

据我所知,如果脚本2写入stdout几次(它有一些“echo”语句来帮助调试),它就会消失(被杀?)。我说这个的原因是因为如果我改变init.sh脚本来做

/data/mystuff/bin/script2 >/dev/null 2>&1 &

然后script2完美无缺。这必须与stdout输出的去向有关。 script2从init.sh继承它的stdout流,而init.sh是从Runtime.getRuntime().exec(command)获取它的,所以它得到了什么,以及为什么一个进程在写入它几次就会被杀死?

明显的解决方法是放

/exec </dev/null >/dev/null 2>&1

在我的init.sh脚本的顶部,将它和它的子节点从父stdin,stdout和stderr流中分离出来,但我很想知道它为什么会在第一时间出现故障。

0 个答案:

没有答案