Linux timeout 명령어와 Kill signal

timeout이란?

특정 커맨드를 실행하고 지정된 수행시간(DURATION) 동안 끝나지 않을 경우 종료(kill)시킨다. 사실은 종료시킨다기보다는 지정된 시그널을 프로세스에 보낸다는 것이 더 정확하지만, 일반적으로 SIGTERM 을 이용해 종료시키기 때문에 이렇게 설명이 되어있는 것 같다.

참고로 kill 커맨드도 실제로 kill을 하지는 않고 시그널을 보낼 뿐이다. 그래서 kill -9 pid 와 같이 kill signal을 옵션으로 줘야 프로세스가 종료된다.

사용법

timeout 커맨드의 셸에서의 사용 방법은 다음과 같다.

$ timeout [OPTION] DURATION COMMAND [ARG]

옵션은 여러가지가 있는데 주로 -s 또는 --signal 옵션을 사용한다. 프로세스가 종료될 때 어떤 신호를 보낼지 결정할 수 있기 대문이다. manpage의 시그널 옵션에 관한 설명은 다음과 같다.

  -s, --signal=SIGNAL
                 specify the signal to be sent on timeout;
                   SIGNAL may be a name like 'HUP' or a number;
                   see 'kill -l' for a list of signals

여기서 SIGNAL 은 시스템에 지정되어 있는 시그널을 의미하는데, 이는 다음 섹션에서 자세하게 알아본다. 일반적으로 9 또는 KILL 을 시그널로 주어 프로세스를 종료시킨다.

DURATION 은 실수형(float) 숫자로 일, 시, 분, 초를 각각 d, h, m, s를 suffix로 시간을 표기하게 된다. 아래 예제에서는 0.0001d 를 사용했다.

$ timeout 0.0001d ping localhost # 0.0001d ~ 8.64s

다만 여러 suffix를 함께 사용할 수 없기 때문에 실수형 숫자와 suffix를 잘 계산해서 적어야 한다.

SIGNAL

시그널은 운영체제마다 약간씩 다르게 정의되어 있다. 하지만 대체로 POSIX.1-1990 표준에 정의된 시그널은 대부분 공통으로 사용하고 있다. 아래 표는 그 중 일부다. 이외에도 POSIX.1-2001 또는 그 외의 시그널들을 모두 확인하고 싶다면 터미널에서 man 7 signal 을 입력하면 매뉴얼을 볼 수 있다.

번호 이름 설명 기본 처리
1 SIGHUP(HUP) 터미널에서 Hang up이 감지되거나
작업 중인 프로세스가 종료될 경우
종료
2 SIGINT (INT) 키보드 인터럽트 (Ctrl + C) 종료
3 SIGQUIT(QUIT) 키보드 종료 (Ctrl + ) 코어 덤프
4 SIGILL(ILL) 잘못된 명령 코어 덤프
5 SIGTRAP(TRAP) trace(추적), breakpoint(중지점)에서 TRAP 발생 코어 덤프
6 SIGABRT (ABRT) abort(3) 의 Abort 시그널 코어 덤프
8 SIGFPE 부동소수점 에러 코어 덤프
9 SIGKILL (KILL) Kill 시그널 종료
11 SIGSEGV 메모리 참조 에러 코어덤프
15 SIGTERM (TERM) Termination 시그널 종료
17 SIGSTOP 프로세스 정지 종료

이 중 SIGKILLSIGSTOP 은 caught, blocked, ignored가 될 수 없다.

위에서 timeout 의 시그널 옵션을 숫자 또는 이름으로 줄 수 있다고 했는데, 위 표의 숫자 또는 이름 중 하나를 선택해 입력하면 된다.

$ timeout --signal=9 1 ping localhost
$ timeout --signal=SIGKILL 1 ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.041 ms
[1]    18314 killed     timeout --signal=SIGKILL 1 ping localhost

마지막으로 SIGKILLSIGTERM 에 관한 재미있는 만화가 있어 첨부한다.

Reference