
컴퓨터 시간이 충분합니다. 프로세스에 제한 시간을 부여하여 프로세스에 대해 실행할 수있는 최대 시간을 설정할 수 있습니다. timeout명령. 다음은이 명령으로 프로그램 실행을 제한하는 방법에 대한 자습서입니다.
타임 아웃은 무엇을합니까?
그만큼 timeout 명령을 사용하면 프로그램이 실행될 시간의 제한을 설정할 수 있습니다. 그러나 왜 그렇게 하시겠습니까?
한 가지 경우는 프로세스 실행 시간을 정확히 알고있는 경우입니다. 일반적인 유스 케이스는 timeout 로그 파일이 하드 드라이브 공간을 끊임없이 소모하지 않도록 로깅 또는 데이터 캡처 프로그램을 제어하십시오.
또 다른 경우는 프로세스 실행 시간을 모르지만 무한정 실행하지 않으려는 경우입니다. 프로세스 실행 설정, 터미널 창 최소화 및 잊어 버리는 습관이있을 수 있습니다.
간단한 유틸리티조차도 일부 프로그램은 네트워크 성능을 저해 할 수있는 수준에서 네트워크 트래픽을 생성 할 수 있습니다. 또는 대상 장치의 리소스를 묶어 성능을 저하시킬 수 있습니다. (ping컴퓨터를 사용하지 않는 동안 이러한 유형의 프로그램을 장시간 실행하는 것은 좋지 않습니다.
timeout GNU Core Utils의 일부이므로 Linux 및 macOS와 같은 Unix와 유사한 운영 체제에는 모두 시간 초과가 내장되어 있습니다. 설치할 것이 없습니다. 상자에서 바로 사용할 수 있습니다.
타임 아웃 시작하기
간단한 예를 들어 보겠습니다. 예를 들어 기본 명령 줄 옵션을 사용하면 ping Ctrl + C를 눌러 명령을 중지 할 때까지 명령이 실행됩니다. 방해하지 않으면 계속 진행됩니다.
ping 192.168.4.28

사용하여 timeout, 우리는 확인할 수 있습니다 ping 네트워크 대역폭을 늘리고 핑되는 장치를 방해하지 않습니다.
이 다음 명령은 timeout 시간 제한 ping. 실행 시간이 15 초입니다 ping.
timeout 15 ping 192.168.4.28

15 초 후 timeout 종료 ping 세션과 명령 행 프롬프트로 돌아갑니다.

다른 시간 단위와 함께 시간 초과 사용
15 뒤에 “s”를 추가 할 필요는 없었습니다. timeout 값이 초 단위라고 가정합니다. “s”를 추가 할 수 있지만 실제로 차이는 없습니다.
분, 시간 또는 일 단위로 측정 된 시간 값을 사용하려면 “m”, “h”또는 “d”를 추가하십시오.
3 분 동안 ping을 실행하려면 다음 명령을 사용하십시오.
timeout 3m ping 192.168.4.28

ping 3 분 전에 실행됩니다 timeout 들어와 정지 ping 세션.

시간 초과로 데이터 캡처 제한
일부 데이터 캡처 파일은 매우 빠르게 커질 수 있습니다. 이러한 파일이 다루기 어렵거나 크기에 문제가 생기지 않도록하려면 캡처 프로그램을 실행할 수있는 시간을 제한하십시오.
이 예에서는 tcpdump네트워크 트래픽 캡처 도구입니다. 이 기사에서 연구 한 테스트 머신에서 tcpdump Ubuntu Linux 및 Fedora Linux에 이미 설치되어 있습니다. 다음 명령으로 Manjaro Linux 및 Arch Linux에 설치해야합니다.
sudo pacman -Syu tcpdump

우리는 실행할 수 있습니다 tcpdump 기본 옵션으로 10 초 동안 다음 명령을 사용하여 출력을 capture.txt라는 파일로 리디렉션합니다.
timeout 10 sudo tcpdump > capture.txt
(tcpdump 캡처 된 네트워크 트래픽을 파일로 저장하는 자체 옵션이 있습니다. 우리가 논의하고 있기 때문에 이것은 빠른 해킹입니다 timeout아니 tcpdump.)
tcpdump 네트워크 트래픽 캡처를 시작하고 10 초 동안 기다립니다. 그리고 10 초가왔다 갔다하고 tcpdump 여전히 실행 중이며 capture.txt의 크기는 계속 커지고 있습니다. 중지하려면 성급한 Ctrl + C가 필요합니다. tcpdump.
capture.txt의 크기 확인 ls 몇 초 만에 209K로 성장했음을 보여줍니다. 그 파일은 빠르게 커지고있었습니다!
ls -lh capture.txt

어떻게 된 거예요? 왜 안했어 timeout 중지 tcpdump?
모두 신호와 관련이 있습니다.
올바른 신호 보내기
언제 timeout 프로그램을 중지하고 SIGTERM 신호를 보냅니다. 이것은 프로그램을 정중하게 요청합니다. 일부 프로그램은 SIGTERM 신호를 무시하도록 선택할 수 있습니다. 그런 일이 발생하면 우리는 timeout 좀 더 강력 해 지려고
우리는 물어 보면서 그렇게 할 수 있습니다 timeout 대신 SIGKILL 신호를 보냅니다.
SIGKILL 신호는“잡히거나 차단하거나 무시”할 수 없으며 항상 통과합니다. SIGKILL은 정중하게 프로그램 중지를 요구하지 않습니다. SIGKILL은 스톱워치와 코쉬로 모퉁이를 숨 깁니다.
우리는 사용할 수 있습니다 -s 알리는 (신호) 옵션 timeout SIGKILL 신호를 보냅니다.
timeout -s SIGKILL 10 sudo tcpdump > capture.txt
이번에는 10 초가 지나면 tcpdump 중지되었습니다.

정중하게 요구
우리는 요청할 수 있습니다 timeout SIGTERM을 사용하여 프로그램을 중지하고 SIGTERM이 작동하지 않는 경우에만 SIGKILL을 보내려고합니다.
이를 위해 우리는 -k (킬 후) 옵션. 그만큼 -k 옵션에는 매개 변수로 시간 값이 필요합니다.
이 명령에서 우리는 묻습니다 timeout 시키다 dmesg 30 초 동안 실행 한 다음 SIGTERM 신호로 종료하십시오. 만약 dmesg 40 초 후에도 여전히 실행 중입니다. 이는 외교 SIGTERM이 무시되었으며 timeout 작업을 마치려면 SIGKILL로 보내야합니다.
dmesg 커널 링 버퍼 메시지를 모니터하고 터미널 창에 표시 할 수있는 유틸리티입니다.
timeout -k 40 30 dmseg -w

dmesg 30 초 동안 실행되고 SIGTERM 신호를 수신하면 중지됩니다.

우리는 그것이 중지 된 SIGKILL이 아님을 알고 있습니다 dmesg SIGKILL은 항상 터미널 창에“Killed”라는 한 단어 사망 기사를 남기기 때문입니다. 이 경우에는 발생하지 않았습니다.
프로그램 종료 코드 검색
올바르게 동작하는 프로그램은 종료 될 때 쉘에 값을 다시 전달합니다. 종료 코드라고합니다. 일반적으로 이것은 프로그램이 실행되는 동안 문제가 발생했는지 여부를 쉘 또는 프로세스가 프로그램을 시작한 프로세스에 알리는 데 사용됩니다.
timeout 자체 종료 코드를 제공하지만 걱정하지 않아도됩니다. 아마도 프로세스의 종료 코드에 더 관심이있을 것입니다. timeout 통제하고 있습니다.
이 명령은 ping 5 초 동안 작동합니다. 이 기사를 연구하는 데 사용 된 테스트 네트워크에있는 Nostromo라는 컴퓨터를 핑합니다.
timeout 5 ping Nostromo.local

이 명령은 5 초 동안 실행되며 timeout 종료합니다. 그런 다음이 명령을 사용하여 종료 코드를 확인할 수 있습니다.
echo $?

종료 코드는 124입니다. 이것은 값입니다. timeout SIGTERM을 사용하여 프로그램이 종료되었음을 나타냅니다. SIGKILL이 프로그램을 종료하면 종료 코드는 137입니다.
Ctrl + C로 프로그램을 중단하면 종료 코드가 timeout 0입니다.
timeout 5 ping Nostromo.local
echo $?

프로그램 실행이 종료되면 전에 timeout 그것을 종료 timeout 종료 코드를 프로그램에서 셸로 다시 전달할 수 있습니다.
이런 일이 발생하기 위해서는 프로그램이 자체적으로 중지되어야합니다 (즉, 아니 에 의해 종료 timeout)를 사용해야합니다. --preserve-status 선택권.
우리가 -c 값이 5 인 (카운트) 옵션 ping 다섯 요청 만 해고합니다. 우리가 주면 timeout 1 분 동안 ping 확실히 그 자체로 종료되었을 것입니다. 다음을 사용하여 종료 값을 확인할 수 있습니다 echo.
timeout --preserve-status 1m ping -c 5 Nostromo.local
echo $?

ping 5 개의 핑 요청을 완료하고 종료합니다. 종료 코드는 0입니다.
종료 코드가 오는지 확인하려면 ping힘을합시다 ping 다른 종료 코드를 생성합니다. 존재하지 않는 IP 주소로 핑 요청을 보내려고하면 ping 오류 종료 코드와 함께 실패합니다. 그런 다음 사용할 수 있습니다 echo 종료 코드가 0이 아닌지 확인하십시오.
timeout --preserve-status 1m ping -c 5 NotHere.local
echo $?

그만큼 ping 명령은 분명히 존재하지 않는 장치에 도달 할 수 없으므로 오류를보고하고 닫습니다. 종료 코드는 2입니다. 종료 코드입니다 ping 일반적인 오류에 사용합니다.
기본 규칙 설정
timeout 프로그램을 실행하는 데 한계가 있습니다. 로그 파일이 하드 드라이브를 초과하거나 네트워크 도구를 실행 한 것을 잊어 버릴 위험이있는 경우 timeout 컴퓨터가 스스로 조절하도록하십시오.








