जवाबों:
हम इसे आज़माकर क्यों नहीं देखते? माता-पिता और बच्चे दोनों की प्रक्रिया में signal(3)
फंसने का उपयोग करते हुए एक तुच्छ कार्यक्रम SIGINT
है और यह आने पर प्रक्रिया को पहचानने वाला एक संदेश प्रिंट करता है।
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void parent_trap(int sig) {fprintf(stderr, "They got back together!\n");}
void child_trap(int sig) {fprintf(stderr, "Caught signal in CHILD.\n");}
int main(int argc, char **argv) {
if (!fork()) {
signal(SIGINT, &child_trap);
sleep(1000);
exit(0);
}
signal(SIGINT, &parent_trap);
sleep(1000);
return 0;
}
चलो बुलावा आया test.c
। अब हम इसे चला सकते हैं:
$ gcc test.c
$ ./a.out
^CCaught signal in CHILD.
They got back together!
टर्मिनल में उत्पन्न रुकावट संकेतों को सक्रिय प्रक्रिया समूह तक पहुंचाया जाता है, जिसमें यहां माता-पिता और बच्चे दोनों शामिल हैं । आप देख सकते हैं कि दोनों child_trap
और parent_trap
जब मैं दबाया मार डाला गया Ctrl- C।
POSIX में संकेतों और संकेतों के बीच बातचीत कीfork
एक लंबी चर्चा है । यहाँ इसका सबसे अधिक सामग्री हिस्सा यह है कि:
कांटा () के बाद प्रक्रिया समूह को भेजे गए एक संकेत को माता-पिता और बच्चे दोनों को दिया जाना चाहिए।
उन्होंने यह भी ध्यान दिया कि कुछ सिस्टम बिल्कुल सही तरीके से व्यवहार नहीं कर सकते हैं, विशेष रूप से जब सिग्नल समय के बहुत करीब पहुंचता है fork()
। यह पता लगाना कि क्या आप उन प्रणालियों में से एक हैं, शायद कोड को पढ़ने या बहुत भाग्य की आवश्यकता है, क्योंकि प्रत्येक व्यक्तिगत प्रयास में इंटरैक्शन गायब नहीं होते हैं।
अन्य उपयोगी बिंदु हैं:
kill
) को भेजा जाता है, केवल उस प्रक्रिया तक पहुंचाया जाएगा , चाहे वह माता-पिता या बच्चा हो।SIGINT
कोड (डिफ़ॉल्ट व्यवहार) के साथ बाहर निकलेंगी।