Ctrl + C를 사용하지 않고 tail -f 모드를 종료하는 방법은 무엇입니까?


22

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

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

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


23
tail대화식이 아닙니다. 명령을받지 않습니다.
muru

5
SIGTERM (기본값)과 SIGKILL을 사용한 강제 종료 프로세스에도 차이가 있습니다. SIGTERM '요청'프로세스가 중지되고이 신호는 프로그램에서 처리 할 수 ​​있습니다. 반면에 SIGKILL은 실제로 프로세스를 종료합니다. 자세한 내용은 다음 man signal을 참조하십시오
mrc02_kr

9
이 질문의 전제는 잘못되었습니다. 그 특별한 성격은 당신이 생각하는 방식으로 과정을 "죽이지" 않습니다 . 그것은 송신 인터럽트 신호를 그것에 아닌 또는 종료 신호.
JdeBP

6
tail걱정하지 않고 중단 하거나 죽이는 것이 완벽하게 합리적 입니다. 그러나 대안을 원한다면, most문서화되지 않은 "팔로우"모드가 있고 Shift + F로 시작하고 Q로 깨끗하게 종료 할 수있는을 고려하십시오.
Toby Speight

4
여기서 문제는 "프로세스를 죽이는 것이 좋은 방법이 아니라는 것"이라는 인식입니다. 프로세스에 ^ C를 보내는 것은 "나는 당신과 함께 끝났고 당신이 멈 추길 원합니다"라고 말하는 한 가지 방법입니다. 그것은 이다 리눅스 터미널 프로세스를 종료합니다 "기본"방법. 장기 실행 프로세스를 종료하기로 선택한 경우, 중지하기로 선택한 선택의 영향으로 인해 혼란이 생길 ​​수 있지만 tail -f그렇지 않습니다. :)
Josh

답변:


46

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

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

less +F filename

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

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


7
주제를 벗어. OP는 "정방향 모드를 종료하고 파일을 스크롤"하도록 요청하지 않았습니다. 오히려, 영업 이익은 Ctrl + C 사용하지 않고 꼬리 -f을 종료하는 방법을 묻는
fpmurphy을

6
@ fpmurphy1 OP의 질문 전제가 잘못되었다고 가정하면 ( tailCTRL-C에 의해 죽지 않고 대화 형이 아닙니다) 내 대답이 적절 이상이라고 생각합니다.
dr01

11
@ fpmurphy1 OP를 문자 그대로 받아들이면 주제가 맞지 않지만 오해를 다루는 교육 답변을 선호하고 동시에 OP가 실제로 달성하려는 것, 즉 실제 질문에 대한 답변을 제공합니다.
MarioDS

15
"Ctrl-C는 테일 프로세스를 종료하지 않습니다" -예. 또는 적어도 kill <pid>그렇게합니다. 대부분의 프로그램에서 Ctrl-C(= SIGINT)와 ( SIGTERM과 ) 어느 정도 차이는 없습니다 SIGKILL. 세 가지 모두에 대한 기본 동작은 exit()호출 된 것처럼 프로세스를 종료하는 것 입니다. 단 SIGKILL,에 대한 사용자 모드 코드 exit()는 호출되지 않습니다 ( atexit()정리 등) 는 예외입니다 . Ctrl-C그리고 SIGTERM특히 프로그램이 명시 적으로 잡아서 행동하지 않는 한 완전히 동일합니다. GNU 꼬리는 그렇지 않습니다.
marcelm

4
@marcelm 프로세스 종료는 exit()호출되는 것과 다릅니다 . 핸들러 exit()를 실행하고 atexit()열린 stdio 파일을 정리합니다 (가장 중요한 것은 출력 버퍼를 플러시 함). SIGINT핸들러는이 작업을 수행 할 수 있지만, 대부분의 프로그램은 귀찮게하지 않습니다; 나는 모르겠다 tail.
Barmar

14

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

그건 ControlC:)

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

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

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

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

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


2
실제로, make예제는 왜 우리가 항상 .DELETE_ON_ERROR:Makefile을 작성 하는지를 상기시켜줍니다. 우리는 Make가 명령 중 하나가 신호를 받았음을 알게되면 부분적으로 작성된 중간 파일을 제거하기를 원합니다.
Toby Speight

SIGINTToby의 .DELETE_ON_ERROR:예에 표시된 것처럼 프로세스는 종료 전에 트랩 및 정리를 수행 할 수 있습니다 .
추후 공지가있을 때까지 일시 중지되었습니다.

1
예, SIGINT를 잡을 수있는 능력은 @Arthur가 원하는 것이라고 말한 이유입니다. 꼬리에 "좋은"가 될 필요가 없습니다, 당신은 그것을의 감정을 해치지 않을 것입니다 ^C:)
조쉬

12

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

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

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


6

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

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

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


5
예, 컴퓨터를 종료 tail하는 중입니다. 아직도, 당신은 내가 추측하는 잘못이 아니에요.
Aaron

5
tailSIGTERM으로 종료하는 것이 SIGINT로 종료하는 것보다 어떻게 더 좋습니까?
Dmitry Grigoryev

1
@DmitryGrigoryev 당신은 완전히 옳습니다-더 좋지 않습니다. 그러나이 답변은 실제로 실제로 많이 사용되지는 않지만 OP의 질문에 직접 대답합니다. 그러나 컨트롤을 눌러 메뉴를 선택해야하는 Dell DRAC Java 앱과 컨트롤을 해제하기 위해 두 번째 메뉴 선택 (Dell c5220 블레이드)을 종료 할 때 ping과 같은 작업을 종료하는 데 시간 초과를 사용했습니다.
Criggie

0

답변은 상황에 따라 다릅니다. 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

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

즐겨.

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