Ctrl + C를 사용하지 않고 tail -f 모드를 종료하는 방법은 무엇입니까? 모드를 종료 Ctrl+c하는 방법은 무엇입니까? 내가 원하는 것은에서와

내가 할 때 프로세스를 죽이는 데 tail -f filename사용하지 않고 모드를 종료 Ctrl+c하는 방법은 무엇입니까?

내가 원하는 것은에서와 같이 정상적인 종료 방법 q입니다 top.

프로세스를 죽이는 것이 좋은 방법이 아니라고 생각하기 때문에 질문에 대해 궁금합니다.



답변

의견에서 언급했듯이 SIGTERM 또는 SIGKILL 신호 (악명 높은 …) 를 전송하여 수행되는 프로세스를 종료 Ctrl-C하지 마십시오 . 순방향 모드를 종료하고 종료하라는 SIGINT 만 보냅니다 .tail-9tail

참고로, 이들은 더 나은 도구입니다.

less +F filename

에서을 less눌러 Ctrl-C앞으로 모드를 종료하고 파일을 스크롤 한 다음을 눌러 F앞으로 모드로 다시 돌아갈 수 있습니다.

참고 less +F로 더 나은 대안으로 많은 주장한다tail -f . 두 도구의 차이점과주의 사항에 대해서는 다음 대답을 읽으십시오 .`tail -f`가`less + F`보다 효율적입니까?


답변

내가 원하는 것은 q와 같은 일반적인 종료 방법입니다.

그건 ControlC🙂

프로세스를 죽이는 것이 좋은 방법이 아니라고 생각하기 때문에 질문에 대해 궁금합니다.

^C( ControlC)는 프로세스에 SIGINT 를 보내며 다음과 같이 정의됩니다.

SIGINT 신호는 사용자가 프로세스를 중단하려고 할 때 제어 터미널을 통해 프로세스로 전송됩니다.

그것이 바로 여기서하고 싶은 것은 인터럽트 tail입니다. 당신이하려는 일을 성취 할 수있는 다른 방법은 없습니다 ( “멋지게”끝내다) tail.

누르는 ^C것은 리눅스에서 작업을 중단 시키려고 시도합니다. 이것은 완벽하게 정상이며, 프로세스가 중간에 있고 프로세스를 끝내지 못하고 “유일하지 않은”면만 있다면 “좋지 않습니다” 그 과정에서 남은 것은 효과입니다. 예를 들어, 명령 ^C중간에 make부분적으로 컴파일 된 소프트웨어를 남겨 두지 만 괜찮습니다. 추가 실행은 make중단 된 부분을 정리 / 다시 시작합니다.


답변

tail -f파일 이름, Ctrl c프로세스 를 종료하는 데 사용하지 않고 모드를 종료 하는 방법

당신은 그렇게 할 수 없습니다. 아마도 당신은 달리고 싶었을 것입니다tail -f somefile | less

Ctrl c청각 장애 서브 시스템에 의해 해석 (당신의 쉘에 의해)와 전송되는 SIGINT신호를 (참조 신호 (7)PTY (7) …). tty demystified를 참조하십시오 .


답변

이것은 작동하고 귀하의 질문에 대답하지만 특히 만족스러운 해결책은 아닙니다.

timeout 15s tail -f /var/log/messages

이것은 15 초 동안 명령을 실행 한 다음 누를 필요없이 명령을 죽입니다. ^C


답변

답변은 상황에 따라 다릅니다. tail -f를 우아하게 끝내려면 트리거가 필요합니다. 특정 시점에 완료되어 트리거가 될 수있는 작업의 출력을 모니터하려고한다고 가정하십시오.

task >& filename.log &
task_pid=$!
tail -f filename.log &
tail_pid=$!
while [ 1 ]
do
    # -0 is a special "poke" signal - "are you around?"
    kill -0 $task_pid
    if [ $? -eq 0 ]
    then
        # Original task is still alive.
        sleep 2
        continue
    fi
    kill -TERM $tail_pid
    break
done

나는 과거에 비슷한 아이디어를 사용했다.

즐겨.