将 A 的标准输出并行传输到 B 是否安全

将 A 的标准输出并行传输到 B 是否安全

我在跑A file | B --params > file.txt。由于我想加快处理速度,所以我使用了parallel -j+0< a.txt同时运行20个作业。 a.txt 包含所有命令:

A file1 | B --params > file1.txt 

A file2 | B --params > file2.txt

A fileN | B --params > fileN.txt

这条路安全吗?并行运行时,不同程序的标准输出会混乱吗?

答案1

并行运行时,不同程序的标准输出会混乱吗?

如果它们都是独立的进程写入单独的文件,则情况并非如此——它们的每个实例B都是不同的,并且输出到它自己的位置。

答案2

只要 B 的每个实例写入不同的文件,就可以了。然而,这种方法的安全性最终取决于 B.

例如,当我尝试执行与您的解决方案类似的操作时,我过去曾被编码不良的程序所困扰。就我而言,程序使用srand(time(NULL))并写入rand()基于 - 的临时文件。当程序的 10 个实例同时启动时,这会严重破坏,因为它们都写入同一个临时文件。

只要你的程序不包含这样的错误,并且不写入某些固定路径,就应该没问题。

答案3

这是唯一的情况不是安全的是 A 或 B 写入程序中硬编码的资源(例如 /etc/passwd)。

但对于绝大多数程序来说不是案子。因此并行运行它们是安全的。

相关内容