Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用gnu_parallel运行多个可执行和/或bash脚本?_C++_Linux_Bash_Parallel Processing_Gnu Parallel - Fatal编程技术网

C++ 如何使用gnu_parallel运行多个可执行和/或bash脚本?

C++ 如何使用gnu_parallel运行多个可执行和/或bash脚本?,c++,linux,bash,parallel-processing,gnu-parallel,C++,Linux,Bash,Parallel Processing,Gnu Parallel,我最近一直在尝试以一种比单独打开几个终端实例并在脚本中执行更方便的方式并行运行脚本 在过去的几天里,我一直在努力学习如何使用gnu_parallel,但我仍然有点不知所措,希望有人能提供一个直接的例子 假设我有一个名为blah.exe的g++编译代码和一个名为blah.sh的bash脚本,它们可以单独运行,但我希望在不同的目录中执行它们 我一直在看书 及 但我并不完全清楚语法 要串联运行这些,我将执行以下操作: for i in 1 2 3 4 mv ./blah.exe directory

我最近一直在尝试以一种比单独打开几个终端实例并在脚本中执行更方便的方式并行运行脚本

在过去的几天里,我一直在努力学习如何使用gnu_parallel,但我仍然有点不知所措,希望有人能提供一个直接的例子

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

我一直在看书

但我并不完全清楚语法

要串联运行这些,我将执行以下操作:

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
我试图理解如何使用parallel在一个命令中将此负载拆分为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' 
printf "%s\0" FRED*/ | parallel -0 'cd {}; pwd' 
如果要处理所有目录,可以使用:

parallel ... ::: {1..4} 6 7 {11..14}
printf "%s\0" */ | parallel -0 'cd {}; pwd' 
printf "%s\0" FRED*/ | parallel -0 'cd {}; pwd' 
如果要处理以
FRED
开头的所有目录,可以使用:

parallel ... ::: {1..4} 6 7 {11..14}
printf "%s\0" */ | parallel -0 'cd {}; pwd' 
printf "%s\0" FRED*/ | parallel -0 'cd {}; pwd' 

您的脚本是否会影响任何可能使并行化更加困难的共享资源?如果您希望在
bash
中的后台运行进程,请将
&
附加到命令中。另请参见Jesper,是的,我可以使用bash和&,但我想编写一个脚本来使用gno_parallelReda进行并行化,据我所知,我仔细地定位错了位置,不会特别困难谢谢你,Mark。你是对的,这是多重处理,很抱歉分类错误,我会改变的。差不多就是这样。我只想问你一个问题:首先,如果我想做1..4然后6,11..20,正确的语法是什么?我试着用1,2,3,4,6。。。另一个问题是是否有打印输出和日志的选项?我添加了一个不连续目录号的语法示例。您能否澄清或询问有关日志和打印件的问题?哪些日志和打印输出?他们在哪里?关于日志,请不要介意。不知怎的,它被保存在缓存中,通过测试,我找到了一种只使用“command>log.log”的方法。然而,我认为这可能违反了每个问题一个主题的政策,但我还有一个问题。假设我有一个巨大的文件列表,需要在其中执行“blah.exe”。假设我在“glah.tmp”中有一个文件名列表,我知道在命令问题是免费的情况下可以使用它——还有答案!我认为最好再问一个问题,因为可能有几种解决方案,而且可能会变得一团糟。您可以始终单击原始问题下的
共享
,复制超链接并粘贴到新问题中以供参考。我会留意一个新问题,我相信Ole Tange(《代码》parallel(《代码》)的作者)也会看到这个问题,所以你很快就会得到答复。