为何通过adb shell执行程序时第二种方式无法正常后台运行?
ADB后台执行程序的两种方式差异
下面是两种通过ADB在设备后台执行程序的方式,以及它们的效果差异:
有效方式:
先进入设备的交互式ADB Shell:adb shell再在Shell内执行后台命令:
nohup /data/hello_test > /dev/null 2>&1 &这种方式下,程序可以稳定在后台运行,使用
ps -elf命令能正常查到对应的进程。无效方式:
直接通过单条带引号的命令执行:adb shell "nohup /data/hello_test > /dev/null 2>&1 &"这种方式无法让程序在后台留存,执行后用
ps -elf查不到该程序的运行进程。
原因分析
当使用单条带引号的adb shell命令时,ADB会启动一个非交互式临时Shell会话来执行命令。命令执行完成后,这个临时Shell会立即退出,此时会给它的子进程(也就是nohup启动的hello_test)发送SIGHUP信号。尽管nohup的设计是忽略SIGHUP,但由于临时Shell会话的特性,进程依然会被终止。而第一种交互式Shell的方式下,会话不会自动退出,nohup启动的进程能脱离终端并持续运行。
内容的提问来源于stack exchange,提问作者xj916.CH
相关产品推荐
相关产品推荐

