shell `time` 命令并行执行的正确顺序
Posted
技术标签:
【中文标题】shell `time` 命令并行执行的正确顺序【英文标题】:Correct order of parallel execution of shell `time` command 【发布时间】:2019-04-02 21:26:19 【问题描述】:我需要执行下面的命令(作为脚本的一部分),但我不知道按什么顺序放置东西才能正确执行。我想要做的是将 file.smt2 作为输入到 optimathsat,执行它,获取执行时间。但我希望使用所有 CPU 内核并行执行多次。
parallel -j+0 time Desktop/optimathsat-1.5.1-macos-64-bit/bin/optimathsat < file.smt2 &>results.csv
我在文件开头添加了#!/bin/bash -x
以查看发生了什么,这是输出:
+ parallel -j+0 time file.smt2
parallel: Warning: Input is read from the terminal. You are either an expert
parallel: Warning: (in which case: YOU ARE AWESOME!) or maybe you forgot.
parallel: Warning: ::: or :::: or -a or to pipe data into parallel.
...从第一行,我可以看出顺序是错误的。从第 2,3 和 4 行开始,缺少语法。我该如何解决这个问题?
【问题讨论】:
提示:foo bar > baz
重定向 foo bar
的输出以覆盖文件 baz。
@agc 我已修正错字。我知道 > 通常用于重定向。 Optimathsat 的文档建议采用这种方式。
【参考方案1】:
所以我认为你不关心结果,而只关心时间:
seq $(parallel --number-of-threads) |
parallel -j+0 -N0 --joblog my.log 'Desktop/optimathsat-1.5.1-macos-64-bit/bin/optimathsat < file.smt2'
cat my.log
-N0
插入 0 个参数。
考虑阅读 GNU Parallel 2018 (printed, online) - 至少第 1+2 章。你的命令行会感谢你的。
【讨论】:
以上是关于shell `time` 命令并行执行的正确顺序的主要内容,如果未能解决你的问题,请参考以下文章