You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:01:04