【问题标题】:ADB Command Weird BehaviorADB 命令奇怪的行为
【发布时间】:2013-12-13 11:09:45
【问题描述】:

我有一个关于亚行的问题。

对于这个问题的标题,我很抱歉,因为我真的不知道如何给这个问题起一个好的标题。

目前我正在使用许多 android 设备,我注意到在某些设备上会出现以下问题。

假设我想运行位于手机 /data/local/tmp/ 文件夹中的 shell 脚本 (my_script.sh)。

如果我这样做:

adb shell 'sh /data/local/tmp/my_script.sh &'

电话没有任何反应。

如果我只是进入 adb shell(通过在终端上输入 adb shell)并且当我得到这个提示时:

shell@android:/ $ 

然后我输入以下内容:

sh /data/local/tmp/my_script.sh &

一切正常。

这种情况只发生在我拥有的少数设备上。所以我无法弄清楚我到底做错了什么。

这是另一条可能对某人有所帮助的信息。如果我最后不使用“&”(这意味着我不在后台进程中运行脚本),一切正常。

以下代码给出了正确的行为:

adb shell 'sh /data/local/tmp/my_script.sh'

我完全迷路了,我希望这里有人可以帮助我。

提前致谢!

更新:所以这个问题让我困惑了一段时间,我花了很多时间调查这个问题。我注意到另一种行为,比如我锁定屏幕(通过按电源键)然后发出命令:

adb shell 'sh /data/local/tmp/my_script.sh &'

然后解锁屏幕,脚本就可以正常运行了。

这真的是我很久以来遇到的最奇怪的事情了。

我真的希望有人能在这里伸出援手。

【问题讨论】:

  • 它无法运行的设备之间是否存在一致性?它们都是相同的 API 版本或制造商吗?
  • 您好科里,感谢您的快速回复。是的,这两个不工作的设备都是三星设备。如何查看 API 版本?
  • 有一张桌子here
  • 你为什么要在后台运行脚本?只需在后台运行整个 adb 命令,否则关闭 adb 连接将关闭脚本的 stdin/out/err 并可能导致它失败。
  • 您好 dtmilano,通过在命令中运行整个 adb 命令,您的意思是类似于 adb shell 'sh /data/local/tmp/my_script.sh' & 吗?

标签: android shell adb


【解决方案1】:

我猜你想守护一些程序在后台运行。但是通常子进程会在父进程消失时被杀死。在这种情况下,您的 adb shell 是父进程。

而且这种行为因设备而异。刚在手机上试了一下,发现“&”没有任何作用,shell命令还是被屏蔽了。

我认为处理它的更好方法是使用 linux 的标准守护程序方法。请参考:

  1. Write a daemonize native program
  2. How to daemonize a script on a generic linux os

【讨论】:

    猜你喜欢
    • 2015-03-28
    • 2012-04-05
    • 2012-06-21
    • 2022-01-05
    • 2015-12-07
    • 2015-01-11
    • 2012-10-22
    • 2019-01-18
    • 1970-01-01
    相关资源
    最近更新 更多