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

관련 정보