Quando un processo si interrompe, poiché so che non verrà più restituito alcun output. Ma sempre dopo aver interrotto il ping
comando abbiamo le statistiche dell'esecuzione e, come so, fa parte dell'output.
[email protected]:~$ 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
[email protected]:~$
Come funziona?
Risposta accettata:
Ctrl +C fa in modo che il terminale invii SIGINT al gruppo di processi in primo piano. Un processo che riceve SIGINT può fare qualsiasi cosa, può anche ignorare il segnale. Una reazione comune a SIGINT è uscire con grazia, cioè dopo aver ripulito, ecc.
Il tuo ping
è semplicemente progettato per stampare le statistiche su SIGINT e poi per uscire.
Altri strumenti potrebbero non uscire affatto su SIGINT. Per esempio. un comportamento normale di una shell interattiva (mentre non esegue un comando) è cancellare la sua riga di comando e ridisegnare il prompt.
SIGINT non è l'unico segnale progettato per terminare i comandi. Vedere il manuale (man 7 signal
), ci sono molti segnali la cui azione predefinita è terminare il processo. kill
invia SIGTERM per impostazione predefinita. SIGTERM non è SIGINT. Entrambi possono essere ignorati. SIGKILL non può essere catturato, bloccato o ignorato, ma dovrebbe essere la tua ultima scelta.