내가 할 때 프로세스를 죽이는 데 tail -f filename
사용하지 않고 모드를 종료 Ctrl+c
하는 방법은 무엇입니까?
내가 원하는 것은에서와 같이 정상적인 종료 방법 q
입니다 top
.
프로세스를 죽이는 것이 좋은 방법이 아니라고 생각하기 때문에 질문에 대해 궁금합니다.
답변
의견에서 언급했듯이 SIGTERM 또는 SIGKILL 신호 (악명 높은 …) 를 전송하여 수행되는 프로세스를 종료 Ctrl-C하지 마십시오 . 순방향 모드를 종료하고 종료하라는 SIGINT 만 보냅니다 .tail
-9
tail
참고로, 이들은 더 나은 도구입니다.
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
나는 과거에 비슷한 아이디어를 사용했다.
즐겨.