특정 시간 내에 프로세스가 종료되었는지 확인

특정 시간 내에 프로세스가 종료되었는지 확인

프로그램을 운영하고 있어요. 이 프로그램에서는 특정 명령을 실행하고, 특정 시간을 초과하면 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  

timeSTDERR로 인쇄된 출력을 캡처하려면 하위 쉘(괄호)이 필요합니다 . 대신 time foo 2> log명령의 STDERR만 리디렉션하므로 를 사용하면 작동하지 않습니다 .footime

할당된 시간 내에 명령이 완료된 횟수만 원하는 경우 다음을 수행합니다.

 ulimit -t 1800
for i in {1..10}; do
  ./bsolo3.0.17 test.opb && let count++
done  
echo "Job finished in time $count times."

관련 정보