내 운영 체제는 AIX(7.2)이고 쉘은 ksh88(가급적) 또는 ksh93(필요한 경우)입니다.
실행을 위한 최대 타이머를 설정하는 스크립트를 작성하고 싶습니다. 이 제한 시간 내에 작업을 완료하면 정상적으로 종료되어야 하지만, 이 타이머가 꺼지면 작업 완료 여부에 관계없이 즉시 중지되어야 합니다.
내 순진한 구현은 다음과 같습니다.
#! /bin/ksh
function pTimer
{
typeset -i iProcID=$1 # process ID of main process
sleep $CiMaxTime
print -u2 - "TIMER: time is up, aborting $0" # terminate if time is up
kill -15 $iProc
exit 1
}
# main()
typeset -i iProc=$$
typeset -i CiMaxTime=60 # maximum time in seconds
pTimer $iProc &
# ... actual work done here.
exit 0
이것다소간의 작품그러나 불행하게도 스크립트가 타이머에 의해 종료되거나 "정기적으로" 종료되더라도 프로세스는 스크립트가 종료된 후 주기적으로 뒤처지게 됩니다. 어떻게 든 쉘 프로세스 관리에 대한 나의 이해가 부족한 것 같습니다. 스크립트가 종료된 후 모든 "남은 음식"을 정리하려면 어떻게 해야 합니까?
답변1
timeout 명령을 사용할 수 있습니다
timeout DURATION COMMAND [ARG]...
DURTATION
시간 초과 기간은 어디에 있고 스크립트와 해당 매개 변수는 무엇입니까 COMMAND
?ARG
예를 들어
/usr/bin/time timeout 5 sleep 10
프로그램
0.00user 0.00system 0:05.01elapsed
이는 "sleep 10"이 실제로 5초 후에 종료된다는 의미입니다.