【发布时间】:2011-11-13 22:25:44
【问题描述】:
如果我以这种方式加载二进制文件,我在终端中遇到了一个非常奇怪的问题:
adb shell "su -c '
chmod 666 /dev/graphics/fb0
&& export CLASSPATH=/data/local/device.jar
&& export LD_LIBRARY_PATH=/data/local
&& exec app_process /system/bin com.device.client.Main /data/local/device.conf'"
然后二进制文件加载正常,但它是前台进程,显然,直到我杀死程序 adb shell 才会返回。
现在奇怪的是,如果我想将 app_process 作为后台进程并在末尾添加 &:
&& exec app_process /system/bin com.device.client.Main /data/local/device.conf &'"
看起来它立即终止了。我尝试添加睡眠:
adb shell "su -c '
chmod 666 /dev/graphics/fb0
&& export CLASSPATH=/data/local/device.jar
&& export LD_LIBRARY_PATH=/data/local
&& exec app_process /system/bin com.device.client.Main /data/local/device.conf & && sleep 50'"
程序运行了 50 秒,但之后 adb shell 返回命令行,程序终止。 (我的程序有一个等待套接字连接的 while (true) 循环,因此它永远不会终止)。
没有产生错误或任何东西。在睡眠的 50 秒内,如果我执行 adb shell 和 ps,我会看到“app_process”,但在 50 秒之后,它就不再存在了,我的命令行又回到了在我的计算机上接收输入。
我真的不确定发生了什么。看起来作为后台进程运行使“su”返回到 adb 的 shell,shell 退出,程序终止。如果是这种情况,请问我该如何解决?
非常感谢。
【问题讨论】:
标签: bash unix scripting process