【发布时间】:2020-01-06 11:27:03
【问题描述】:
我正在尝试使用以下脚本运行将近 40k 的测试用例。
只显示部分脚本 -
#!/bin/bash
# RUN script
echo "please run with: nice nohup ./run_script"
# working directory where script is stored
WORKING_DIR=$(pwd)
# temp directory to build and run the cmake ctest
BUILD_DIR=${BUILD_DIR:-/localtemp/build}
# clean and make build directory
rm -rf $BUILD_DIR
mkdir -p $BUILD_DIR
mkdir -p $BUILD_DIR/../result
cmake -G Ninja
ninja test
注意:我使用 6 核并行线程来运行我的测试用例。
在第一次尝试中,一切都通过了,这是真的,因为我修复了测试用例中的所有错误。
但是有一段时间,如果我想重新运行相同的脚本,那么我在运行一些 40k 的测试用例时会遇到错误。但是,如果我分别(一个接一个)运行失败的测试用例,那么它们将完美通过。
所以我假设rm -rf 需要一些时间来删除所有情况下的旧二进制文件和符号(40 GB 文件)。所以我需要等待完全删除,然后再次运行我的脚本。所以我应该在我的脚本中的rm -rf 命令之后添加一些延迟。
我在某处读到rm -rf 将在完成工作后返回状态。然后只执行下一个命令。但我的 scnerio 看起来像是在显示 rm -rf 正在后台运行。
意味着当我停止较早的运行时,我不应该立即开始新的运行。我需要花一些时间在脚本中使用rm -rf 命令删除早期运行的旧输出(延迟介绍),然后运行我下面的忍者命令。这是真的吗?
【问题讨论】:
-
您究竟是如何运行并行线程的?如果这个 shell 脚本的六个实例同时运行,如果它们共享同一个构建目录,它们当然会践踏彼此的状态。
-
我正在使用下面的 ctest 宏:CTEST_PARALLEL_LEVEL。这是一个 CMake 环境变量。
标签: shell delay rm ninja ctest