【问题标题】:Shell script wait command never endsShell 脚本等待命令永不结束
【发布时间】:2018-10-06 14:30:43
【问题描述】:

我正在编写一个脚本文件来从 shell 运行 Android 测试用例,我有一些 Android ADB commands 来运行脚本文件中的测试用例来执行,并让 wait 等待第一组测试用例结束后设置结束然后开始秒。

脚本文件:sn-p

#!/bin/bash
# set up code

#First set of test cases
adb -s emulator-5554 shell am instrument -w com.android.demo.app.tests1/android.support.test.runner.AndroidJUnitRunner &
adb -s emulator-5556 shell am instrument -w com.android.demo.app.tests2/android.support.test.runner.AndroidJUnitRunner &
wait # Second set test cases does not started because this **wait** never ends

#Second set of test cases
adb -s emulator-5554 shell am instrument -w com.android.demo.app.tests3/android.support.test.runner.AndroidJUnitRunner &
adb -s emulator-5556 shell am instrument -w com.android.demo.app.tests4/android.support.test.runner.AndroidJUnitRunner &
wait

echo '--------- Test cases done --------------'

如果我运行脚本,它会执行其运行第一组(test1 和 test2)用例,并且等待永远不会结束以启动第二组测试用例 但 Android 工作室(Android 的 IDE)表示已完成 test1 和 test2 的测试用例,这是第一次设置。 注意:ADB 在 Android Emulator 上运行测试用例。 请帮助我了解为什么我没有等待结束。

【问题讨论】:

  • wait 不会退出 adb 的两个副本(以及之前在“设置代码”中省略的任何其他后台进程)。提出这个问题是您有责任证明 adb 退出,因此 shell 的行为在任何方面都是出乎意料的。您还有责任证明没有任何“设置代码”会创建其他作业表条目,这些条目引用仍在运行的作业,因此仍可能成为 wait 目标。

标签: android linux macos shell sh


【解决方案1】:

我使用以下代码进行了测试:

#!/bin/bash
#set 1
ls -la &
ls -la &
wait # wait here

#set 2
pwd &
pwd &
wait # wait here

代码按预期完美运行,没有停止或错误。

请尝试在不运行test1和test2的情况下运行test3和test4,看看是否有帮助。

编辑:另外,从另一个答案 here 您应该能够捕获上一个命令的 PID(进程 ID),并将该 PID 用作等待参数。

【讨论】:

    【解决方案2】:

    wait 等待当前 shell 的所有 children。如上例所示,在您开始分叉测试用例之前,您可能已经分叉了一个孩子。示例:

    #!/bin/bash
    
    sleep 40 &  # something unrelated you forgot to mention
    
    # test case set 1:
    sleep 5 &   # first test case
    sleep 7 &   # second test case
    wait  # this now will wait for the two test cases _AND_ the sleep 40 from above.
    

    有时“不相关”的分叉内容不容易发现,所以不要仓促。

    如果这是您的问题的原因,您可能可以通过使用不同的 shell 来生成另一个孩子来解决它,如下所示:

    (sleep 40 &)  # use a different shell to spawn off the child
    

    【讨论】:

      猜你喜欢
      • 2015-03-04
      • 1970-01-01
      • 2023-04-11
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 2013-02-18
      相关资源
      最近更新 更多