Process

為什麼終止後有ping的輸出?

  • November 11, 2020

當一個程序中斷時,據我所知,不會再返回任何輸出。但總是在中斷ping命令之後,我們有執行的統計數據,據我所知,它是輸出的一部分。

amirreza@time:~$ ping 4.2.2.4
PING 4.2.2.4 (4.2.2.4) 56(84) bytes of data.
64 bytes from 4.2.2.4: icmp_seq=1 ttl=51 time=95.8 ms
64 bytes from 4.2.2.4: icmp_seq=2 ttl=51 time=92.3 ms
^C
--- 4.2.2.4 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 92.321/94.052/95.783/1.731 ms
amirreza@time:~$ 

它是如何工作的?

Ctrl+C使終端向前台程序組發送 SIGINT。接收到 SIGINT 的程序可以做任何事情,它甚至可以忽略信號。對 SIGINT 的常見反應是優雅地退出,即在清理等之後。

ping的設計只是為了在 SIGINT 上列印統計資訊,然後退出。

其他工具可能根本不會在 SIGINT 上退出。例如,互動式 shell(不執行命令時)的通常行為是清除其命令行並重新繪製提示。

SIGINT 不是唯一用於終止命令的信號。參見手冊(man 7 signal),有許多信號的預設操作是終止程序。kill預設發送 SIGTERM。SIGTERM 不是 SIGINT。兩者都可以忽略。SIGKILL 不能被擷取、阻止或忽略,但它應該是您的最後選擇。

引用自:https://unix.stackexchange.com/questions/618665