한동안 실행 된 후 프로세스 종료


13

grep프로세스 명령이 실행되거나 활성화되는 시간을 제한하고 싶습니다 .

예를 들어. 다음을 수행하고 싶습니다.

grep -qsRw -m1 "parameter" /var

그러나 grep명령을 실행하기 전에 grep프로세스가 얼마나 오래 지속되는지 제한하고 싶습니다 .

어떻게해야합니까?

가능하다면 나중에 시간 제한이 없도록 돌아가거나 재설정하는 방법은 무엇입니까?


3
당신은 이미 이것을 묻지 않았습니까? stackoverflow.com/questions/3061377/…

없음이 다른 quastion이 나는 오리지널 quastion 야엘에 답을 얻을 수 없습니다 때문에

4
@ yael : 이전에는을 사용하여 완벽하게 좋은 솔루션을 얻었으며 timeout설치 방법에 대한 지침도 얻었습니다. 이 답변을 무시하고 질문을 복제하는 것은 무례합니다.
Paul R

죄송하지만 NO 시스템에 아무것도 설치하고 싶지 않습니다 THX yael

5
@yael : 그런 다음 질문을 복제하고 다시 시작하지 말고이 제약 조건을 포함하도록 원래 질문업데이트해야 합니다.
Paul R

답변:


12

당신은 사용할 수 있습니다 timelimit을을 가 기본 우분투에서 사용할 수 있습니다, 또는 당신은 그것을 직접 컴파일 할 수 있습니다.

timelimit 는 명령을 실행하고 주어진 신호로 주어진 시간 후에 생성 된 프로세스를 종료합니다. "경고"신호가 먼저 전송 된 다음, 타임 아웃 후에 셧다운시 init (8) 작동 방식과 유사한 "킬"신호가 발생합니다.


2
우분투 (10.10 데스크톱, 11.04 서버)에 없으므로 기본값이 아닐 수도 있습니다. 그러나 쉽게 빨리 잡았습니다 sudo aptitude install timelimit. 한 번 설치하면 잘 작동합니다.

7

여기에 약간의 hackish bash가 있습니다.

grep -qsRw -m1 "parameter" /var &

GREPPID=$!

( sleep 30; kill $GREPPID ) &

fg $GREPPID

기본적으로 백그라운드에서 검색을 시작한 다음 30 초 동안 기다린 다음 검색 프로세스를 종료하는 서브 쉘을 시작합니다. 검색 시간이 30 초 미만이면 프로세스가 이미 종료 된 것입니다. 다른 것이 pid를 재사용 할 가능성이 매우 적기 때문에 이미 죽은 프로세스를 종료하는 것은 좋은 생각이 아니지만 이와 같은 경우에는 일반적으로 괜찮습니다. 마지막으로 검색은 포 그라운드로 돌아가고 완료되거나 종료 될 때까지 실행됩니다.


$를 얻는 방법? 이 경우 grep에서 내 스크립트에서 $? grep에서 grep이 문자열과 일치하는지 확인하십시오. yael

나는 그것을 할 수있는 간단한 방법이 있는지 확실하지 않습니다. 또한 bash가 작업 제어를 활성화하지 않은 스크립트에서는이 방법이 작동하지 않습니다. 스크립트에서 작업을 수행하려면 약간의 Perl 해커에 의존해야 할 수도 있습니다. 흠 ...
월터 문트

이 질문에 펄에 도착할 수 있습니까? Yael

4

"tgrep"라는 새 파일을 작성하고 다음을 입력하십시오 (또는 원하는대로 호출).

#!/bin/bash
grep $@ &
PID=$!
sleep 30 && kill $PID 2>/dev/null &
wait $PID
exit 0

그런 다음을 실행하십시오 chmod a+x tgrep. 이제 당신이 그것을 사용하려면 입력 할 수 있습니다

./tgrep -i "results" /home/dan/*txt

또는 $ PATH 변수에 포함 된 디렉토리 (예 : / home / dan / bin /에있는 경우)를 tgrep (./없이 디렉토리에서 사용 가능)으로 사용할 수 있습니다. $ PATH 변수, 그렇지 않으면 추가 할 수 있습니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.