对不起,这个问题需要大量的积累,但总而言之,它是关于许多并行实例srun ... >output_file将或不会导致某些进程/任务对其他进程/任务产生的输出造成破坏的条件.
案例 0:仅 bash(无 SLURM)
假设这prog-0.sh是以下玩具脚本:
#!/bin/bash
hostname >&2
if [[ $JOB_INDEX = 0 ]]
then
date
fi
Run Code Online (Sandbox Code Playgroud)
此脚本将一些输出打印到stderr,并可能将当前日期打印到stdout。
case-0.sh下面显示的“驱动程序”脚本产生$NJOBS进程,所有写入prog-0-stdout.txt:
#!/bin/bash
for i in $( seq 0 $(( NJOBS - 1 )) )
do
JOB_INDEX=$i ./prog-0.sh >prog-0-stdout.txt &
done
Run Code Online (Sandbox Code Playgroud)
运行后
% NJOBS=100 ./case-0.sh 2>prog-0-stderr.txt
Run Code Online (Sandbox Code Playgroud)
...我的期望是prog-0-stderr.txt将包含 100 行,并且prog-0-stdout.txt将是空的。
我的期望实现了:
% wc prog-0-std*.txt
100 100 3000 prog-0-stderr.txt
0 0 0 prog-0-stdout.txt …Run Code Online (Sandbox Code Playgroud) slurm ×1