在Linux上,删除命令“ rm”是否在后台运行?

问题描述 投票:0回答:2

我正在尝试使用以下脚本运行将近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命令删除较早运行的旧输出,然后再运行下面的ninja命令。是真的吗?

shell delay rm ninja ctest
2个回答
0
投票

rm命令将不是“在后台”运行,或者以任何方式与脚本中的其他命令并发运行,除非您明确地告诉它(例如,在命令末尾使用&)。完成后(即执行bash脚本中的下一个命令),文件应已删除。因此,您的问题可能出在其他地方。

话虽如此,例如,如果您使用网络共享,FUSE文件系统或任何其他机制来更改文件系统对操作系统的删除请求的反应方式或时间,则行为可能有所不同。


0
投票

比这要复杂一些。 rm将不会在后台运行。可以确定的是,删除操作至少是在逻辑上完成的(因此从用户的角度删除了所有内容);这意味着在某些操作系统上,即使命令终止了,也有可能在内核中进行了低级删除(内核实际上会清理掉您背后的一些内部结构)。但这通常不应干扰您的脚本。您的问题肯定在其他地方。

可能是某些进程保留了一些文件,即使它们似乎已被删除...因此,磁盘可能无法如您所愿地释放。然后,您必须谨慎完成这些过程,以使内核真正清除文件...

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.