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

如何避免ADB执行后台sleep命令获取PID时出现阻塞?

解决ADB执行后台sleep脚本阻塞的问题

方案一:修改脚本重定向输出

修改/data/local/tmp/script.sh的内容为:

sleep 100 >/dev/null 2>&1 &
echo $!

执行命令adb -s <DEVICE> shell sh /data/local/tmp/script.sh即可立即获取PID,不会被sleep阻塞。

方案二:单行命令直接实现

无需脚本的话,直接用以下命令完成需求:

adb -s <DEVICE> shell 'sleep 100 >/dev/null 2>&1 & echo $!'

方案三:彻底脱离会话(可选)

如果需要避免后台sleep进程被ADB会话终止影响,可以加上disown或setsid:

  • 脚本版:
    sleep 100 >/dev/null 2>&1 &
    disown
    echo $!
    
  • 单行命令版:
    adb -s <DEVICE> shell 'setsid sleep 100 >/dev/null 2>&1 & echo $!'
    

原因说明

ADB shell会维持与所有子进程的标准输入输出关联,后台运行的sleep默认仍将stdout/stderr绑定到ADB会话通道,导致ADB必须等待sleep关闭这些描述符才会结束会话,从而造成阻塞。将sleep的输出重定向到/dev/null后,切断了这种关联,ADB就能在输出PID后立即退出。

内容的提问来源于stack exchange,提问作者ANSOLO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:24:54