我正在 CentOS 中运行命令,同时我想做两件事:
- 将命令的运行时间写入文件并
- 设置停止命令的时间限制
我成功地实现了第一个。是这样的:
(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