2

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

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] Address already in use”。

因此,当我通过 openen 例如两个终端并行运行风车命令并在每个终端中运行风车命令时,它就可以工作了。

如果 xargs 不是解决方案,那么如果您能指出我的正确方法,我将不胜感激:)

4

3 回答 3

1

xargs不会运行你的命令是并行的。

你为什么不在任何与 bourne 兼容的 shell 中执行它呢?

for i in 1 2; do windmill chrome test=./test http://www.google.ch & done
于 2011-12-11T09:03:15.507 回答
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)。你爱你的命令行。

如果这不是您想要的,请重新表述您的问题。

于 2011-12-12T14:10:50.887 回答
0

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

于 2011-12-12T08:21:59.730 回答