2014-05-18 2 views
1

특정 조건이 발생할 때까지 특정 디렉토리를 모니터링하고 싶습니다.inotifywait를 종료하는 방법

ARCHIVE_PATH=$(inotifywait -m -r -q -e close_write -e moved_to --format '%w%f' /test | while read FILE; do 
    # ... Code ... 
    if [ $CONDITION ]; then 
    echo "$VALUE" 
    break 
    fi 
done) 

지금, break 또는 exit 0 사용 여부에 상관없이, while 루프가 계속됩니다. 루프를 종료하고 출력을 변수에 전달하는 가장 좋은 방법은 무엇입니까?

편집 :

kill -2 $$break 교체 만 계속 트리거 보인다. 그리고 더 나쁜 것은 - 휴식이 잘 될 때가 있습니다 - 드물기는하지만 때가 있습니다.

+0

나는 아마도'inotifywait'의 (나중에 살해) PID를 가져 오기 위해 필요하지만 어떻게 아무 생각이 없습니다. – abergmeier

답변

0

지금은 신호하여이 작업을 수행 : 쉘이 SIGINT이 서브 쉘 정도에서 전송되도록 허용하지 않습니다처럼

trap "exit 0" 10 

ARCHIVE_PATH=$(inotifywait -m -r -q -e close_write -e moved_to --format '%w%f' /test | while read FILE; do 
    # ... Code ... 
    if [ $CONDITION ]; then 
    echo "$VALUE" 
    kill 10 $$ 
    fi 
done) 

, 따라서 나는 또 다른 신호 (SIGUSR1)와 트랩을 보내도록했다 보인다.

0

이 시도 : kill -2 -$$ 또는 kill -SIGINT -$$

-$$의 마이너스 기호는 그룹의 모든 프로세스에 신호를 보낸다. $$은 현재 프로세스입니다. 따라서 -$$은 다음을 의미합니다. 현재 프로세스 그룹의 모든 프로세스에이 신호를 보냅니다.

이 설명서 페이지에 자세한 설명 : http://linux.die.net/man/1/kill

대답이에서 영감을했다 : https://bbs.archlinux.org/viewtopic.php?id=186989