2012-10-05 1 views

risposta

9

In breve, lo fanno tutti.

Quando si imposta una pipeline, la shell crea uno process group. ^C viene interpretato dalla disciplina della linea del kernel come richiesta dell'utente di interrompere il gruppo di processi attualmente in esecuzione in primo piano. L'invio di un segnale come SIGINT a un gruppo di processi invia automaticamente il segnale a tutti i processi nel gruppo.

2

mi piace la sperimentazione meglio:

#!/bin/bash 
# FILE /tmp/bla.sh 
# trap ctrl-c and call ctrl_c() 
trap ctrl_c INT 

MY_ID=$1 # Identifier for messages 

function ctrl_c() { 
    echo >&2 "GOODBYE $MY_ID" 
    exit 
} 

# This will continue until interrupted, e.g. if the input/output get closed 
cat 
# If we somehow got to the end 
echo >&2 "grace $MY_ID" 

loro concatenazione, l'esecuzione e la rottura di loro

[email protected]:~$ /tmp/bla.sh 1 | /tmp/bla.sh 2 
^CGOODBYE 2 
GOODBYE 1 
0 

Come si può vedere, entrambe le esecuzioni ottenuto il segnale di interruzione, nel senso che tutti vengono uccisi. Inoltre, l'ordine in cui emettono che sono stati uccisi è casuale, ad esempio

[email protected]:~$ /tmp/bla.sh 1 | /tmp/bla.sh 2 | /tmp/bla.sh 3 | /tmp/bla.sh 4 
^CGOODBYE 2 
GOODBYE 4 
GOODBYE 1 
GOODBYE 3