bash script2023. 8. 1. 12:02

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/595779

특정 명령어 또는 프로세스의 실행 시간을 제한해야 할 경우 timeout을 이용할 수 있다. 어떤 작업이 일정 시간 안에 끝나지 않으면 강제로라도 끝내야 하는 상황이 있을 경우, 또는 특정 프로세스가 버그 등으로 인해 무한히 끝나지 않고 헤멜 가능성이 있다고 생각될 경우에 요긴하다. 아래의 예시를 보자.

# 실행 시간 제한 3.5초
timeout 3.5s sleep 10

# 종료 상태(exit status) 확인
echo $?
124

위의 예시를 보면 sleep으로 10초간 대기하라는 명령이지만 실행 시간 제한을 3.5초로 설정했으므로 3.5초후에 sleep 프로세스는 강제 종료된다.

예시를 하나 더 보자.

# 실행 시간 제한 2분
timeout 2m sleep 10

# 종료 상태 확인
echo $?
0

위의 경우 10초간 대기하는 명령에 실행 시간 제한이 2분이다. sleep 프로세스가 10초후 정상종료되어 위의 명령은 10초후에 완료된다. 시간 제한에 걸리기 전에 프로세스가 정상적으로 종료되었으므로 종료 상태도 0이다.

만약 좀 더 강력한 강제종료신호인 9번 신호(SIGKILL)를 이용해서 프로세스를 종료하고 싶다면 -s 옵션을 이용해서 지정할 수 있다.

# 실행 시간 제한 3.5초, SIGKILL 신호 사용
timeout -s 9 3.5s sleep 10

시간 제한은 초(s), 분(m), 시간(h), 일(d) 단위로 설정할 수 있다.

728x90
Posted by 반달가면