이 답변 에 에 명령 줄 명령 일정한 시간이 지나면 명령을 자동-죽일
bash 명령 줄에서 장기 실행 명령을 시간 초과하는 단선 방법을 제안합니다.
( /path/to/slow command with options ) & sleep 5 ; kill $!
그러나 지정된 "장기 실행"명령이 시간 초과보다 일찍 완료 될 수 있습니다. ( "일반적으로 오래 실행되지만 때로는 빠른"명령 또는 재미를 위해 tlrbsf라고하자 .)
따라서이 멋진 1- 라이너 방식에는 몇 가지 문제가 있습니다. 첫째,는 sleep
조건부가 아니므로 시퀀스가 완료되는 데 걸리는 시간에 바람직하지 않은 하한을 설정합니다. tlrbsf 명령이 2 초 안에 완료 될 때 수면을 위해 30 ~ 2m 또는 5m를 고려하십시오 . 둘째, kill
는 무조건적이므로이 순서는 실행 중이 아닌 프로세스를 종료시키고 그 과정에서 우회를 시도합니다.
그래서...
일반적으로 오래 실행되지만 가끔 빠른 ( "tlrbsf" ) 명령 을 시간 초과 하는 방법이 있습니까?
- bash 구현이 있습니다 (다른 질문에는 이미 Perl 및 C 답변이 있습니다)
- 두 가지의 이전에 종료됩니다 : tlrbsf의 프로그램 종료 또는 제한 시간 경과
- 존재하지 않거나 실행되지 않는 프로세스를 종료하지 않습니다 (또는 선택적 으로 나쁜 종료에 대해 불평 하지 않습니다 )
- 1- 라이너 일 필요는 없습니다
- Cygwin 또는 Linux에서 실행할 수 있습니다
... 그리고 보너스 포인트의 경우, tlrbsf 명령의 stdin / stdout / stderr가 원래의 위치 와 동일하게 리디렉션 될 수 있도록 포 그라운드에서 tlrbsf 명령을 실행하고 백그라운드 에서 'sleep'또는 추가 프로세스를 실행합니다. 직접 실행?
그렇다면 코드를 공유하십시오. 그렇지 않은 경우 이유를 설명하십시오.
앞서 언급 한 예제를 해킹하려고 잠시 시간을 보냈지 만 bash 기술의 한계에 도달했습니다.
timeout
유틸리티를 사용하지 않는 이유는 무엇입니까?
timeout
중대하다! 여러 명령 (여러 줄 스크립트) 과 함께 사용할 수도 있습니다 . stackoverflow.com/a/61888916/658497