프로그램을 운영하고 있어요. 이 프로그램에서는 특정 명령을 실행하고, 특정 시간을 초과하면 ulimit 명령을 사용하여 명령 실행을 종료합니다. 더 명확하게 하기 위해 다음 명령을 실행합니다.
ulimit -t 1800 ./bsolo3.0.17 test.opb
이는 1800초보다 오래 걸리는 경우 bsolo 솔버를 종료하고 싶다는 의미입니다.
내가 원하는 것은 명령을 10번 실행한 후 해당 제한 미만으로 명령이 실행된 횟수와 해당 제한을 초과하여 명령이 실행된 횟수를 아는 방법입니다. 아직은 전혀 모르겠어요. 어떤 팁이 있나요?
답변1
적어도 내 시스템(Debian)에서는 그렇지 않습니다 ulimit
. 제한 후에는 명령이 실행되지 않습니다. 제한을 설정한 후 명령을 실행하면 됩니다.
$ ulimit -t 1800
$ ./bsolo3.0.17 test.opb
어쨌든, 사용할 수 있는 시간을 얻으려면time
:
$ time ls > /dev/null
real 0m0.004s
user 0m0.000s
sys 0m0.000s
따라서 명령이 일종의 루프에서 실행되는 경우 다음과 같이 파일에 시간을 캡처할 수 있습니다.
ulimit -t 1800
for i in {1..10}; do
(time ./bsolo3.0.17 test.opb) 2>> times.log
done
time
STDERR로 인쇄된 출력을 캡처하려면 하위 쉘(괄호)이 필요합니다 . 대신 time foo 2> log
명령의 STDERR만 리디렉션하므로 를 사용하면 작동하지 않습니다 .foo
time
할당된 시간 내에 명령이 완료된 횟수만 원하는 경우 다음을 수행합니다.
ulimit -t 1800
for i in {1..10}; do
./bsolo3.0.17 test.opb && let count++
done
echo "Job finished in time $count times."