与xargs并行运行bash命令

时间:2011-12-11 08:46:58

标签: bash xargs windmill

我希望有人可以帮我解决这个简单的问题。我想并行运行此命令

windmill chrome test=./test http://www.google.ch

我正在玩xargs并查看互联网上的示例。但是,我无法构造一个xargs命令来并行执行我提到的命令。

我尝试了以下

echo "chrome test=./test http://www.google.ch" | xargs -n 1 -P 2 windmill

没有执行正确的命令,这意味着风车必须执行错误的命令,因为输出不正确(风车的默认输出用于指定错误的参数)。

然而,我得到了另一个问题,即终端/ python抱怨“socket.error:[Errno 48]地址已经在使用”。

所以当我通过openen例如两个终端并行运行windmill命令并在每个终端运行windmill命令时它就可以工作。

如果xargs不是解决方案,那么如果你能以正确的方式指出我怎么做,我会非常感激:)

3 个答案:

答案 0 :(得分:1)

xargs无法运行您的命令并行。

为什么不在任何兼容bourne的shell中执行此操作?

for i in 1 2; do windmill chrome test=./test http://www.google.ch & done

答案 1 :(得分:1)

您提到要并行运行命令。只有在程序本身内部并行化时才能这样做。

然而,您可以做的是并行运行多个命令。假设你想并行运行这些:

windmill chrome test=./test http://www.google.ch
windmill chrome test=./test http://www.google.se
windmill chrome test=./test http://www.google.no
windmill chrome test=./test http://www.google.de

使用GNU Parallel,您可以:

parallel windmill chrome test=./test http://www.google.{} ::: ch se no de

观看介绍视频以了解详情:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1并浏览教程(man parallel_tutorial)。你命令行爱你。

如果这不是你想要的,请重新说出你的问题。

答案 2 :(得分:0)

我发现有时程序会遇到绑定到最近发布的套接字的问题 - 内核会出于安全原因尝试阻止这种情况。如果你需要能够立即重新绑定,你可能应该尝试SO_REUSEADDR或者每次都绑定到不同的端口。