반달가면 이글루에서 백업 - 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
'bash script' 카테고리의 다른 글
[bash: awk] 특정 위치(field)에 대한 정규표현식 문자열 검색 (0) | 2023.08.08 |
---|---|
[bash: strings] 바이너리 파일에서 문자열만 골라 출력하기 (0) | 2023.08.01 |
[bash: basename] 디렉토리는 제외하고 파일명만 추출하기 (0) | 2023.08.01 |
[bash: awk] awk에서 문자열을 분할하여 배열(array)에 저장하기 (split) (0) | 2023.08.01 |
[bash: awk] 현재 행에서 특정 문자열이 존재할 때 바로 이전 행을 출력하기 (0) | 2023.07.28 |