将Shell脚本后台运行详解与实战

9次阅读
没有评论

案例解决方案:将Shell脚本在后台执行并保持运行

问题背景与需求分析:

用户在开发一个Android应用程序时遇到一个问题,想要将其Shell脚本置于后台继续执行。他在尝试使用ADB命令来实现这一目标,但遇到了困难。

解决方案:

  1. 理解当前环境:首先确认是否需要创建Android应用来处理这个问题。根据描述,该脚本涉及模拟输入操作(如滑动、点击等),这些操作应能够在另一个应用程序处于前台时继续运行。
  2. 使用ADB命令实现后台执行
  3. 虽然用户希望在开发一个Android程序之后解决此问题,但直接使用ADB命令可以在设备上启动并保持Shell脚本的运行。具体而言,在连接手机到电脑并通过adb shell进入系统shell后,通过sh /mnt/sdcard/touch.sh &可以将指定的Shell脚本置于后台执行。
  4. 重要的是,当断开USB线时(即手机从开发者模式切换回普通模式),这类后台进程不会立即终止。但在多数情况下,这些后台任务将会根据系统状态(例如电池电量过低等情况)而自动结束或暂停。
  5. 获取进程ID并结束运行:如果需要手动停止该Shell脚本的执行,则可以通过以下步骤来完成:
  6. 使用adb shell进入设备shell环境;
  7. 输入ps命令查看当前所有正在运行的进程,查找你的脚本对应的PID;
  8. 利用kill -s KILL <PID>终止该进程。

实际案例验证:

假设用户有如下Shell脚本文件内容:

# 定义脚本路径及功能
/touch.sh
# 内容如下:
#!/system/bin/sh
echo "开始运行touch.sh"

sleep 10

while [ 1 ]; do
    input swipe 700 380 1020 600 1000    
    input tap 960 540
    input swipe 1220 700 900 480 1000    
    input tap 960 540
    input swipe 700 380 1020 600 1000    
    input tap 960 540
done
  • 在通过USB连接设备并用adb shell访问后,可以通过如下命令启动这个脚本:
    sh /mnt/sdcard/touch.sh &

注意事项:

  • 过程中应确保ADB工具已正确安装,并且PC与手机均已适配;
  • 对于非root设备,执行上述方法可能不会生效,需要启用超级用户权限才能使用su指令(如前文所述某些情况下)。
  • 应当慎重思考脚本行为对设备性能的影响及潜在的安全风险。

正文完