वास्तव में 0 क्या मारता है?


10

इसमें man pageकहा गया है:

          0      All processes in the current process group are signaled

और मैंने इस तरह की कोशिश की:

$ man kill &
[1] 15247
$
[1]+  Stopped                 man kill
$ kill 0
$ ps
15247 pts/41   00:00:00 man

जैसा कि मैंने समझा, kill 0मौजूदा प्रक्रिया में सभी प्रक्रियाओं को मार दूंगा, जिसमें शामिल हैं pid15247। हालाँकि, इसने इस उदाहरण में कुछ नहीं किया। क्या किसी के पास इस बारे में कोई विचार है कि इसका उपयोग कैसे करें?


आप किस खोल का उपयोग कर रहे हैं?
फैटलएरर

@FatalError मैं बैश का उपयोग कर रहा हूँ
Firegun

जवाबों:


4

मुझे यह पता नहीं चल पाया कि kill 0मेरे हत्यारे के पेज (डेबियन) में कैसे व्यवहार होता है।

लेकिन मेरी दो टिप्पणियाँ हैं:

(1) "प्रोसेस ग्रुप" वह नहीं हो सकता है जिसकी आप अपेक्षा करते हैं। आप इसके साथ प्रोसेस ग्रुप आईडी (PGID) प्रदर्शित कर सकते हैं ps -o "%p %P %r %c %a":

$ ps -o "%p %P %r %c %a"
  PID  PPID  PGID COMMAND         COMMAND
12124 12123 12124 zsh             -zsh
12212 12124 12212 man             man kill
12226 12212 12212 less            less
12302 12124 12302 ps              ps -o %p %P %r %c %a

तो, manप्रदर्शित करने वाले पेजर टूल ( less) के साथ एक ही प्रक्रिया समूह में है, लेकिन यह शेल (मेरे मामले में zsh) से अलग है।

(२) संभवतः दो अलग-अलग killकमांड हैं। एक में बनाया गया bash(देखें बैश (1), अनुभाग "शेल बिल्डिन कॉमन्ड्स") और बाहरी /bin/kill। ये दोनों अलग व्यवहार कर सकते हैं! आप स्पष्ट रूप से बता सकते हैं कि आप किसको टाइप करके builtin killया command killइसके बजाय चलाना चाहते हैं kill। बाहरी कमांड जिसे आप पथ निर्दिष्ट करके भी चला सकते हैं /bin/kill:।


1
PPIDहै माता पिता प्रक्रिया ID है, जो अक्सर प्रक्रिया समूह आईडी है, लेकिन जरूरी नहीं कि,। सही स्तंभ वह है PGID, जो डिफ़ॉल्ट psआउटपुट में प्रकट नहीं होता है ; आपको -oएक कस्टम प्रारूप बनाने के लिए विकल्प का उपयोग करने की आवश्यकता है जिसमें यह शामिल है।
चेप्टर

@chepner: आप बिल्कुल सही हैं, धन्यवाद! मैं अपने साइगविन के पीएस (1) मैन पेज से उलझन में था, जिसमें कहा गया था: "-एल, - लॉन्ग: शो प्रोसेस यूड्स, पपीड्स, पगिड्स, विनपिड्स"। मुझे शर्म आती है, मैंने अपने उत्तर को उसी के अनुसार संपादित किया। हालाँकि, मेरा कथन (केवल मैन + पेजर का एक ही PGID है) अभी जैसा है, ठीक है। (इससे पहले कि वह वाक्य गलत था :-()
mpy

1

अपनी सभी प्रक्रियाओं को रोकने के लिए और अपने आप को लॉग इन करने के लिए, दर्ज करें:

kill -kill 0

यह सिग्नल 9 भेजता है, SIGKILL सिग्नल, सभी प्रोसेस के लिए एक प्रोसेस ग्रुप ID होता है जो सेंडर्स प्रोसेस ग्रुप आईडी के बराबर होता है। क्योंकि शेल SIGKILL सिग्नल को अनदेखा नहीं कर सकता है, यह भी लॉगिन शेल को रोकता है और आपको लॉग ऑफ करता है

यह IBM का AIX मैनुअल है, लेकिन शायद यह अवधारणा लागू होती है।

यह कार्यक्षमता लिनक्स "किल" में मौजूद नहीं है (जैसा कि मैं देख सकता हूं); लेकिन यह है कि यह कैसे "मार" व्यवहार है:

0 को मारना पीआईडी ​​को नहीं मार रहा है। 0. इसके बजाय यह मौजूदा समूह की सभी प्रक्रियाओं को मारने के लिए मारने का एक विकल्प है । अपने आदेश के साथ आप शेल के प्रोसेस ग्रुप आईडी (GID) में सब कुछ मार रहे हैं जिसने किल कमांड जारी किया था।

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