c++ - 如何使用 gnu_parallel 运行多个可执行文件和/或 bash 脚本?

标签 c++ linux bash parallel-processing gnu-parallel

我最近一直在尝试以比打开多个终端实例并分别在脚本中执行更方便的方式并行运行脚本。

过去几天我一直在尝试学习如何使用gnu_parallel,但我仍然有点一无所知,希望有人可以提供一个直接的例子。

假设我有一个名为 blah.exe 的 g++ 编译代码和一个名为 blah.sh 的 bash 脚本,它们可以单独完美运行,但我想在不同的目录中执行它们。

我一直在读书 https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Working-as-xargs--n1.-Argument-appending

https://www.biostars.org/p/182136/

但我不太清楚语法

要连续运行这些,我会这样做:

for i in 1 2 3 4
mv ./blah.exe directory$i
cd directory$i
./blah.exe all
cd ..
end

同样

for i in 1 2 3 4
mv ./blah.sh directory$i
cd directory$i
source ./blah.sh all
cd ..
end

我试图了解如何使用并行在一个命令中将此负载拆分为 4 个逻辑线程。

有人可以为此提供一个例子吗?

感谢您的宝贵时间。

最佳答案

类似于:

parallel --dry-run 'cd directory{}; ../blah.exe all; source ../blah.sh all' ::: {1..4}

无需复制/移动可执行文件,只需运行相同的文件即可。

之后不需要cd ..,因为每次都是一个新进程。

请注意,这不是多线程,而是多处理。


如果您想处理不连续目录号码,您可以使用:

parallel ... ::: {1..4} 6 7 {11..14}

如果你想处理所有目录,你可以使用:

printf "%s\0" */ | parallel -0 'cd {}; pwd' 

如果您想处理FRED开头的所有目录,您可以使用:

printf "%s\0" FRED*/ | parallel -0 'cd {}; pwd' 

关于c++ - 如何使用 gnu_parallel 运行多个可执行文件和/或 bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55905528/

相关文章:

linux - 'kill -STOP and kill -CONT' 是如何工作的?

bash - 在 bash 我正在构建一个更新脚本,如何更新更新脚本

bash - 如何在Linux中从PowerShell Core执行Bash脚本

c++ - 如果模板从未在未评估的上下文之外被调用,是否返回 declval UB?

C++ 日期解析实现

C++ STL Map - find(pair<string,bool>) 在 Windows Visual Studio 中有效,但在 Linux 中不适用于 g++!

linux - 根据某些条件更新文件中的单个列

c++ - 是否可以实现 C++11 互斥锁概念以供 std::condition_variable 使用?

php - 通过浏览器拒绝 CURL 权限,适用于 ssh

bash - 使用基于命令输出的条件