Process
為什麼終止後有ping的輸出?
當一個程序中斷時,據我所知,不會再返回任何輸出。但總是在中斷
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 不能被擷取、阻止或忽略,但它應該是您的最後選擇。