正确使用time、timeout和ulimit命令

正确使用time、timeout和ulimit命令

我正在 CentOS 中运行命令,同时我想做两件事:

  1. 将命令的运行时间写入文件并
  2. 设置停止命令的时间限制

我成功地实现了第一个。是这样的:

(time ./minisat+_64-bit_static opb_clauses.txt ) 2>>../measures.txt

如您所见,我使用 time 命令来计算该命令所需的时间,然后将时间结果转发到文件中measures.txt。这是一个示例measures.txt

real    0m0.002s
user    0m0.000s
sys 0m0.000s

我正在尝试添加第二件事,如下所示:

(timeout 1s time ./minisat+_64-bit_static opb_clauses.txt ) 2>>../measures.txt

该命令的结果弄乱了我的文件并返回如下内容:

0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 6368maxresident)k
0inputs+0outputs (0major+440minor)pagefaults 0swaps

正如您所看到的,“实时”结果不知何故消失了,其他结果采用了不同的格式。如何分离命令time和 的结果timeout

编辑:第二个想法是使用 ulimit 命令而不是超时。我尝试了同样的操作,但使用了 ulimit:

 (ulimit -t 10 time ./minisat+_64-bit_static opb_clauses.txt ) 2>>../measures.txt

但这次我没有任何结果写入measures.txt

答案1

您的环境一定有问题,因为当我尝试相同的示例时,我得到了预期的结果。例如:

# command #1
$ (time echo "hi") 2>> measures.txt
hi

$ cat measures.txt 

real    0m0.000s
user    0m0.000s
sys 0m0.000s

# command #2
$ (timeout 1s time echo "hi") 2>> measures.txt
hi

$ cat measures.txt 

real    0m0.000s
user    0m0.000s
sys 0m0.000s
0.00user 0.00system 0:00.05elapsed 0%CPU (0avgtext+0avgdata 552maxresident)k
56inputs+0outputs (1major+173minor)pagefaults 0swaps

与其将命令构造为两个单独的调用,为什么不这样做:

(
 time ./minisat+_64-bit_static opb_clauses.txt
 timeout 1s time ./minisat+_64-bit_static opb_clauses.txt
) 2>>../measures.txt

相关内容