시간 초과는 지정된 명령을 실행하고 지정된 시간이 지난 후에도 실행 중인 경우 종료하는 명령줄 유틸리티입니다. 즉, 시간 초과를 사용하면 시간 제한과 함께 명령을 실행할 수 있습니다. 시간 초과 명령은 거의 모든 Linux 배포에 설치되는 GNU 핵심 유틸리티 패키지의 일부입니다.
이 기능은 시간 초과 옵션이 내장되어 있지 않은 명령을 실행하려는 경우에 유용합니다.
Linux 시간 초과 명령을 사용하는 방법에 대해 설명합니다.
시간 초과 명령을 사용하는 방법
시간 초과 명령의 구문은 다음과 같습니다.
timeout [OPTIONS] DURATION COMMAND [ARG]…
DURATION은 양의 정수 또는 부동소수점 숫자 뒤에 선택적 단위 접미사가 붙을 수 있습니다.
s - 초
m - 분
H - hours
d - d - days
사용된 단위가 없으면 기본값은 초입니다. 기간을 0으로 설정하면 관련 시간 초과가 비활성화됩니다.
명령 옵션은 인수 앞에 제공되어야 합니다.
다음은 시간 초과 명령을 사용하는 방법을 보여주는 몇 가지 기본적인 예입니다.
5초 후에 명령을 종료합니다.
timeout 5 ping 8.8.8.8
5분 후에 명령을 종료합니다.
timeout 5m ping 8.8.8.8
1분 6초 후에 명령을 종료합니다.
timeout 1.1m ping 8.8.8.8
tcpdump 와 같은 상승된 권한이 필요한 명령을 실행하려면 시간 초과 전에 sudo를 추가합니다.
sudo timeout 300 tcpdump -n -w data.pcap
특정 신호를 보내는 중
신호가 주어지지 않으면 제한 시간에 도달하면 시간 초과가 SIGTERM 신호를 관리되는 명령으로 전송합니다. -s(--signal) 옵션을 사용하여 전송할 신호를 지정할 수 있습니다.
예를 들어 1분 후에 Ping 명령으로 SIGKILL을 보내려면 다음을 사용합니다.
sudo timeout -s SIGKILL ping 8.8.8.8
SIGKILL과 같은 이름으로 신호를 지정하거나 9와 같은 번호를 지정할 수 있습니다. 다음 명령은 이전 명령과 동일합니다.
sudo timeout -s 9 ping 8.8.8.8
사용 가능한 모든 신호 목록을 가져오려면 kill -l 명령을 사용합니다.
kill -l
고착된 프로세스를 제거
시간 제한이 초과되었을 때 전송되는 기본 신호인 SIGTERM은 일부 프로세스에 의해 잡히거나 무시될 수 있습니다. 이러한 상황에서는 종료 신호가 전송된 후에도 프로세스가 계속 실행됩니다.
모니터링되는 명령이 실행되었는지 확인하려면 -k(-kill-after) 옵션과 시간 간격을 사용합니다. 지정된 시간 제한에 도달한 후 이 옵션을 사용하면 시간 초과 명령이 SIGKILL 신호를 중앙 관리 프로그램으로 전송하여 캡처하거나 무시할 수 없습니다.
다음 예에서 시간 초과 시 명령이 1분 동안 실행되며, 종료되지 않으면 10초 후에 종료됩니다.
sudo timeout -k 10 1m ping 8.8.8.8
# timeout -k “./test.sh”
지정된 시간 제한에 도달한 후 중단됩니다.
종료 상태를 보존
시간 제한에 도달하면 timeout이 124를 반환합니다. 그렇지 않으면 관리되는 명령의 종료 상태가 반환됩니다.
제한 시간에 도달한 경우에도 명령 종료 상태를 반환하려면 --reserve-status 옵션을 사용하십시오.
timeout --preserve-status 5 ping 8.8.8.8
포그라운드로 실행
기본적으로 시간 초과는 백그라운드에서 관리되는 명령을 실행합니다. 포그라운드에서 명령을 실행하려면 --forground 옵션을 사용하십시오.
timeout --foreground 5m ./script.sh
이 옵션은 사용자 입력이 필요한 대화형 명령을 실행하려는 경우에 유용합니다.
시간 초과 명령은 지정된 명령을 시간 제한과 함께 실행하는 데 사용됩니다.
시간 초과는 옵션이 많지 않은 간단한 명령입니다. 일반적으로 기간과 관리 명령이라는 두 개의 인수만으로 시간 초과를 호출합니다.
'SW > 리눅스' 카테고리의 다른 글
Linux : Pidof 명령어, 예제, 사용 방법 (0) | 2022.06.18 |
---|---|
Linux : CentOS 8 : Ruby 설치 방법, 예제, 명령어 (0) | 2022.06.17 |
Linux : Tcpdump 명령어, 예제, 방법 (0) | 2022.06.15 |
Linux : Debian 10 : Vagrant 설치 방법, 예제, 명령어 (0) | 2022.06.14 |
Linux : Debian 10 : OpenCV 설치 방법, 예제, 명령어 (0) | 2022.06.13 |