핑할 수 있어구글 사이트Ctrl몇 초 동안 + 를 누르면 C하단에 짧은 요약이 나타납니다.
$ ping google.com
PING google.com (74.125.131.113) 56(84) bytes of data.
64 bytes from lu-in-f113.1e100.net (74.125.131.113): icmp_seq=2 ttl=56 time=46.7 ms
64 bytes from lu-in-f113.1e100.net (74.125.131.113): icmp_seq=3 ttl=56 time=45.0 ms
64 bytes from lu-in-f113.1e100.net (74.125.131.113): icmp_seq=4 ttl=56 time=54.5 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 3 received, 25% packet loss, time 3009ms
rtt min/avg/max/mdev = 44.965/48.719/54.524/4.163 ms
그러나 동일한 리디렉션 출력을 로그 파일로 수행하면 tee
요약이 표시되지 않습니다.
$ ping google.com | tee log
PING google.com (74.125.131.113) 56(84) bytes of data.
64 bytes from lu-in-f113.1e100.net (74.125.131.113): icmp_seq=1 ttl=56 time=34.1 ms
64 bytes from lu-in-f113.1e100.net (74.125.131.113): icmp_seq=2 ttl=56 time=57.0 ms
64 bytes from lu-in-f113.1e100.net (74.125.131.113): icmp_seq=3 ttl=57 time=50.9 ms
^C
리디렉션된 출력을 사용할 때 요약도 얻을 수 있습니까 tee
?
답변1
ping
사망 시 요약 표시 SIGINT
,예를 들어결과적으로 CtrlC또는 요청한 수의 패킷을 전송했을 때( -c
옵션). 포그라운드 프로세스 그룹의 모든 프로세스에 메시지가 전송되도록 CtrlC합니다 .SIGINT
즉이 경우 파이프라인( ping
및 tee
)의 모든 프로세스입니다. tee
캡처하지 않으므로 SIGINT
(Linux에서는 참조 SigCgt
) /proc/$(pgrep tee)/status
신호를 수신하면 파이프 끝이 닫히면서 종료됩니다. 다음에 일어나는 일은 경쟁입니다. 여전히 출력 중이면 출력을 얻기 ping
전에 죽습니다 . 아무것도 출력하기 전에 얻으면 요약을 출력하고 die 를 시도합니다 . 어쨌든 출력은 더 이상 갈 곳이 없습니다.SIGPIPE
SIGINT
SIGINT
SIGPIPE
요약을 얻으려면 ping
다음 명령을 사용하여 종료를 예약하십시오 SIGINT
.
killall -INT ping
또는 미리 결정된 수의 패킷으로 실행하십시오.
ping -c 20 google.com | tee log
또는 (마지막을 위해 최선을 다해 저장),tee
소홀함이 있다SIGINT
, 당신이 발견한 대로.
답변2
tee
+를 누를 때 전송되는 인터럽트 신호를 무시하는 옵션이 있는 것으로 나타났습니다 . ~에서CTRLC남성 티셔츠:
-i, --ignore-interrupts
ignore interrupt signals
전체 파이프라인이 중단되면 SIGINT
이 신호는 파이프라인의 모든 프로세스로 전송됩니다. 문제는 일반적으로 먼저 받은 tee
다음 죽이는 것입니다. 생략하면 요약으로만 전달되어 표시됩니다.SIGINT
ping
ping
SIGPIPE
SIGINT
tee
ping
$ ping google.com | tee --ignore-interrupts log
PING google.com (142.250.150.101) 56(84) bytes of data.
64 bytes from la-in-f101.1e100.net (142.250.150.101): icmp_seq=1 ttl=104 time=48.8 ms
64 bytes from la-in-f101.1e100.net (142.250.150.101): icmp_seq=2 ttl=104 time=51.0 ms
64 bytes from la-in-f101.1e100.net (142.250.150.101): icmp_seq=3 ttl=107 time=32.2 ms
^C
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 32.198/44.005/50.973/8.394 ms
따라서 ping
수신은 SIGINT
결국 종료되어 tee
파이프 작성기가 종료된 것을 확인하고 결국 tee
종료됩니다(지금까지 입력을 "요약"한 후).