कैसे टर्मिनल एमुलेटर एक बच्चे को मारने के बाद अपने बच्चों को मार सकते हैं?


12

मैं जो समझता हूं, उससे SIGKILL को पकड़ा नहीं जा सकता। इसका मतलब यह होगा कि ओएस को नष्ट करने से पहले एक प्रक्रिया में बच्चों को मारने का समय नहीं है। इसे शेल स्क्रिप्ट के साथ प्रदर्शित किया जा सकता है।

#! /bin/bash

trap : SIGTERM SIGINT SIGKILL # SIGKILL is pointless.

mplayer video.avi

इसे SIGKILL के साथ मारने से Mplayer चल रहा है।

$ kill -9 $pid

लेकिन जब एक टर्मिनल एमुलेटर (xterm, टर्मिनल, ...) का उपयोग करते हैं, तो यह बच्चों को इसके साथ मार दिया जाता है। यह कैसे संभव है?

$ mplayer

और इसे मार डालो:

$ kill -9 $terminal_pid

और जहाज के साथ mplayer नीचे चला जाता है। क्या टर्मिनल एमुलेटर किसी तरह SIGKILL को पकड़ रहे हैं या यहां काम करने के लिए कोई और बल है?

जवाबों:


11

द्वारा शुरू की गई प्रक्रिया xtermटर्मिनल के नियंत्रण में सत्र का नेता होगा।

जब टर्मिनल चला जाता है, तो वह प्रक्रिया स्वचालित रूप से एक SITEUP संकेत प्राप्त करती है (इसके बाद SIGCONT)। यह कर्नेल द्वारा एक समान तरीके से भेजा जाता है जब आप CTRL-C दबाते हैं तो प्रक्रियाएँ SIGINT प्राप्त करती हैं।

इसके अतिरिक्त, एक शेल बाहर निकलने पर अपने कुछ बच्चों को SITEUP भेज सकता है ( disownइसे निष्क्रिय करने के लिए कुछ शेल में देखें )


1
सत्र और सत्र के नेताओं के बारे में जानकारी के लिए: unix.stackexchange.com/questions/18166/…
केविन कॉक्स

+1 disownजिसके लिए बहुत उपयोगी है।
गणित

1

आपका प्रश्न स्वयं उत्तर देता है, ऐसा इसलिए होता है क्योंकि ये प्रक्रियाएं टर्मिनल एमुलेटर के तहत बच्चों के रूप में चल रही हैं। तो आप टर्मिनल एमुलेटर को मारते हैं, और ऐसा करने में, सभी बच्चों की प्रक्रियाओं को मारते हैं (क्योंकि बच्चे उसी प्रक्रिया समूह के तहत चल रहे हैं जो कि नियंत्रण टर्मिनल एमुलेटर के रूप में)।

उदाहरण के लिए, निम्न देखें:

csb@darwin[~]$ ps fauwx | grep -A6 "xfce4-terminal" | awk '{ for (i = 2; i <= 9; i++) $i="" ; print $0 }' 
csb         0:32 xfce4-terminal --geometry=271x65 --display :0.0 --role=Terminal-0x1340050-2606-1351620352 --show-menubar --show-borders --hide-toolbars --working-directory /home/csb --tab --working-directory /home/csb
csb         0:00 \_ gnome-pty-helper
csb         0:00 \_ bash
csb         0:00 | 
                  \_ ssh [redacted]
csb         0:00 \_ bash
csb         0:00 \_ ps fauwx
csb         0:00 \_ grep --color=auto -A6 xfce4-terminal
csb         0:00 \_ awk { for (i = 2; i <= 9; i++) $i="" ; print $0 }

ये सभी प्रक्रियाएं 'xfce4-terminal' प्रक्रियाओं के तहत चल रही हैं, इसलिए यदि मैं उस प्रक्रिया को मारता हूं तो यह प्रक्रिया समूह की सभी बाल प्रक्रियाओं को स्वचालित रूप से मार देगा ... उसी तरह, उदाहरण के लिए, टर्मिनल एमुलेटर विंडो से बाहर निकलना जरूरी मेरे SSH कनेक्शन को मार डालो।

गोले जैसे कार्यक्रम नई प्रक्रिया समूह बनाते हैं, आमतौर पर संबंधित बाल प्रक्रियाओं को एक समूह में रखते हैं। प्रत्येक कार्य एक प्रक्रिया समूह है। कर्नेल के बाहर, एक शेल नौकरी के प्रक्रिया समूह को किलपेस्ट सिस्टम कॉल के साथ सिग्नल भेजकर एक नौकरी में हेरफेर करता है, जो एक प्रक्रिया समूह में सभी प्रक्रियाओं के लिए एक संकेत देता है।


3
-1: एक माता पिता की हत्या करता है नहीं बच्चों को मार डाला जा करने के लिए कारण।
कैम

2
गोले जैसे कार्यक्रम नई प्रक्रिया समूह बनाते हैं, आमतौर पर संबंधित बाल प्रक्रियाओं को एक समूह में रखते हैं। प्रत्येक कार्य एक प्रक्रिया समूह है। कर्नेल के बाहर, एक शेल नौकरी की प्रक्रिया समूह को किलपेस्ट सिस्टम कॉल के साथ सिग्नल भेजकर एक नौकरी में हेरफेर करता है, जो एक प्रक्रिया समूह में सभी प्रक्रियाओं को संकेत देता है।
चार्ल्स बॉयड

2
@CharlesBoyd वह टिप्पणी आपके उत्तर का हिस्सा होनी चाहिए।
जोर्डनम

4
@CharlesBoyd: इसे अपने उत्तर में जोड़ें और मैं आपको -1 के बजाय +1 दूंगा। आपका उत्तर वर्तमान में पढ़ता है जैसे कि एक माता-पिता की प्रक्रिया (बीटीडब्ल्यू, इसके सत्र-आधारित, न कि समूह-आधारित प्रक्रिया) को मार दिया जाता है।
camh

@CharlesBoyd मुझे यह समझ में आता है, लेकिन सवाल यह है कि जब यह SIGKILL प्राप्त करता है, तो यह सिग्नल भेजकर "[नौकरी में हेरफेर" करता है। मुझे killpgउस बिंदु पर सिस्टम कॉल का उपयोग करने के लिए कोई रास्ता नहीं दिख रहा है ।
केविन कॉक्स

0

सबसे पहले, मैं उपयोग किए जा रहे टर्मिनल को जीवित रहने वाले mplayer को पुन: पेश नहीं कर सकता xterm

यह मर जाता है, इसका कारण यह है कि माता-पिता की मृत्यु के बाद यह एक SIGHUP हो जाता है।


मैंने ऐसा कभी नहीं कहा, मैंने कहा कि यह मर जाता है लेकिन बच जाता है जब यह एक स्क्रिप्ट में होता है और इसे मार दिया जाता है।
केविन कॉक्स

एक स्क्रिप्ट में नहीं बचता, मेरे लिए।
Tumbleweed
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.