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 &gt; 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` 命令并行执行的正确顺序的主要内容,如果未能解决你的问题,请参考以下文章

怎么用shell脚本实现多 条命令顺序执行?

shell sql 顺序执行命令

Linux shell Bash的基本功能3 多命令与管道符

002-Shell的并发执行原理及其实现

shell获取时间精确到毫秒级别是哪个命令

python Shell命令并行执行