我的终端中有一个非常奇怪的问题,如果我以这种方式加载我的二进制文件:
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退出,程序终止。如果是这种情况,我该怎么办呢?
非常感谢。
答案 0 :(得分:0)
这类问题的常见答案是使用nohup(1)
并重定向stdin,stdout和stderr,以避免任何描述符对终端开放。试试这个:
exec nohup app_process /system/bin com.device.client.Main\
/data/local/device.conf >/tmp/out 2>/tmp/err </dev/null &