2012-10-05 13 views

उत्तर

9

संक्षेप में, वे सभी करते हैं।

पाइपलाइन सेट करते समय, खोल process group बनाता है। ^सी कर्नेल के लाइन अनुशासन द्वारा व्याख्या किया गया है क्योंकि वर्तमान में अग्रभूमि में चल रहे प्रक्रिया समूह को बाधित करने के उपयोगकर्ता के अनुरोध के रूप में। एक प्रक्रिया समूह में SIGINT जैसे सिग्नल भेजना समूह में सभी प्रक्रियाओं को स्वचालित रूप से सिग्नल प्रदान करता है।

2

मुझे पसंद है बेहतर प्रयोग:

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

, उन्हें श्रृंखलन चल रहा है और उन्हें

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

तोड़ने आप देख सकते हैं, दोनों सज़ाएँ बाधा संकेत मिला है, जिसका अर्थ है कि वे सभी मारे। इसके अलावा, जिस क्रम में वे आउटपुट करते थे, वे यादृच्छिक हैं, उदाहरण:

[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 
संबंधित मुद्दे