2012-10-05 14 views

Respuesta

9

En resumen, todos lo hacen.

Al configurar una tubería, el shell crea un process group. ^C se interpreta por la disciplina de línea del kernel como la solicitud del usuario para interrumpir el grupo de procesos que se ejecuta actualmente en primer plano. El envío de una señal como SIGINT a un grupo de procesos entrega automáticamente la señal a todos los procesos en el grupo.

2

me gusta la experimentación mejor:

#!/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" 

encadenándolos, correr y romper ellos

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

Como se puede ver, ambas ejecuciones tuvieron la señal de interrupción, lo que significa que todos mueren. Además, el orden en que muestran que fueron asesinados es aleatorio, por ejemplo:

[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 
Cuestiones relacionadas