我想运行一个专门运行的测试目标。但是,根据https://docs.bazel.build/versions/master/be/common-definitions.html#common.tags,如果我使用“ exclusive”标记,则目标将不会与沙箱一起运行。有时,作为运行测试目标的一部分而产生的子进程不会终止。我想确保子进程终止。
答案 0 :(得分:0)
我的目的是确保Bazel目标完成后,子进程不会继续存在。由于我是在没有Bazel沙箱的情况下运行的,因此我无法利用Bazel的沙箱功能来确保子进程实际上已终止。
幸运的是,我的测试是针对Linux系统的,所以我想使用Linux的进程名称空间功能来确保子进程被终止。在运行Bazel命令之前,我使用了unshare
command来设置进程名称空间:
$ bazel shutdown # ensure Bazel not already running
$ unshare --pid --fork --map-root-user bazel test ...
我认为这里的教训是,即使Bazel也使用Linux名称空间来设置Bazel沙箱,Bazel的沙箱功能还是全有或全无(例如,您使用了许多Linux名称空间或没有Linux名称空间)。