जैसा कि यह कहता है, यह कॉलर के प्रक्रिया समूह के सभी सदस्यों को संकेत भेजता है।
प्रक्रिया समूह का उपयोग शेल में नौकरी नियंत्रण को लागू करने के लिए किया जाता है (उनका उपयोग अन्य चीजों के लिए किया जा सकता है, लेकिन इंटरैक्टिव शेल जॉब नियंत्रण आपके अस्तित्व का मुख्य कारण है)।
आप देखेंगे कि जब आप टाइप करते हैं Ctrl-C, तो वर्तमान नौकरियों की सभी प्रक्रियाएं मार दी जाती हैं, न केवल उन्हें शुरू करने वाली। इसके अलावा, यह पृष्ठभूमि नौकरियों को नहीं मारता है।
यह प्रक्रिया समूहों के साथ हासिल की है। एक नौकरी एक शेल द्वारा शुरू की गई प्रक्रियाओं का एक समूह है जो शेल पृष्ठभूमि या अग्रभूमि में डाल सकता है (टर्मिनल के अग्रभूमि प्रक्रिया समूह या नहीं के रूप में सेट), और एक पूरे के रूप में मार सकता है।
आप प्रक्रिया समूह आईडी और साथ सत्र आईडी के बारे में पता कर सकते हैं ps -j
( j
के लिए Jओब नियंत्रण)।
PGID के प्रक्रिया समूह को मारने के लिए $x
, आप निम्न कार्य करते हैं:
kill -- "-$x"
kill 0
कॉलर के प्रक्रिया समूह को मारता है।
ध्यान दें कि यदि आप ऐसा करते हैं: /bin/kill 0
शेल उस kill
कमांड को निष्पादित करने के लिए एक नया काम शुरू करेगा , इसलिए kill
केवल खुद को मार देगा।
kill
आमतौर पर एक शेल बिल्टिन होता है, इसलिए शेल kill
के प्रोसेस ग्रुप को मार देगा।
हालाँकि, जब शेल संवादात्मक होता है, तो यह प्रक्रिया प्रबंधन समूह है, इसलिए आमतौर पर शेल के प्रक्रिया समूह में कोई अन्य प्रक्रिया नहीं होती है। शेल द्वारा शुरू की गई सभी प्रक्रियाएं, अन्य प्रक्रिया समूहों में हैं:
$ sleep 1000 &
[1] 22746
$ ps -j
PID PGID SID TTY TIME CMD
22735 22735 22735 pts/23 00:00:00 zsh
22746 22746 22735 pts/23 00:00:00 sleep
22749 22749 22735 pts/23 00:00:00 ps
इन सबसे ऊपर, sleep
और ps
दो अलग-अलग प्रक्रिया समूहों, पृष्ठभूमि में एक, अग्रभूमि में एक में हैं और वे खोल की प्रक्रिया समूह से अलग हैं।
आप हालांकि कर सकते हैं:
(man kill & sleep 1; ps -j; kill 0)
इंटरैक्टिव शेल उस उपधारा के लिए एक नया प्रक्रिया समूह शुरू करेगा, और दोनों उपधारा और आदमी (और आपके पेजर, ग्रॉफ ... जैसे आदमी द्वारा शुरू किए गए अन्य आदेश) एक ही प्रक्रिया समूह में होंगे, इसलिए kill 0
वहां काम करेंगे। ( sleep
ऊपर पेजर को शुरू करने के लिए पर्याप्त समय देना है ताकि हम इसे ps -j
मारने से पहले आउटपुट में देख सकें)।
SIGTERM
प्रक्रिया को भेजता है , जो उसने किया है।man
आदेश इसे अनदेखा करने के लिए चुना गया है।