किल, पीकिल और किलर में क्या अंतर है


31

मैं killकमांड से परिचित हूं , और अधिकांश समय हम सिर्फ एक प्रक्रिया को मारने के लिए किल -9 का उपयोग करते हैं, ऐसे कई अन्य संकेत हैं जिनका उपयोग किया जा सकता है kill। लेकिन मुझे आश्चर्य है कि क्या उपयोग के मामले हैं pkillऔर killall, अगर पहले से ही एक किल कमांड है।

उनके कार्यान्वयन में कमांड का उपयोग करें pkillऔर killallकरें kill? मेरा मतलब है कि वे सिर्फ रैपर हैं killया उनका अपना कार्यान्वयन है?

मैं यह भी जानना चाहूंगा कि कैसे pgrepप्रक्रिया नाम से प्रक्रिया आईडी प्राप्त करें।

क्या ये सभी कमांड एक ही अंतर्निहित सिस्टम कॉल का उपयोग करते हैं? क्या प्रदर्शन के दृष्टिकोण से कोई अंतर है, कौन सा तेज है?


2
दो बातें: kill -9डिफ़ॉल्ट रूप से उपयोग क्यों ? -15 (कृपया रुकें) और -1 (मॉडेम ने लटका दिया है, कृपया अपने आप को बंद करें) बहुत अधिक विनम्र हैं। दूसरी बात। नॉन-लाइनक्स बॉक्स पर किलॉल का उपयोग करने से सावधान रहें। यह अलग तरह से व्यवहार कर सकता है। (जैसे सोलारिस पर यह सभी को मारता है। प्रक्रिया के नामों पर फ़िल्टर्ड नहीं है)।
हनीस

जवाबों:


31

killआदेश करने के लिए एक बहुत ही सरल आवरण है kill सिस्टम कॉल है, जो केवल प्रक्रिया आईडी (PIDs) के बारे में जानता है। pkillऔर सिस्टम कॉल केkillall रैपर भी हैं , (वास्तव में, libc लाइब्रेरी में, जो सीधे सिस्टम कॉल को आमंत्रित करता है), लेकिन आपके लिए PID को निर्धारित कर सकता है, जैसे कि, प्रक्रिया का नाम, प्रक्रिया का स्वामी, सत्र आईडी, आदि।kill

कैसे pkillऔर killallकाम का उपयोग करके ltraceया straceउन पर देखा जा सकता है । लिनक्स पर, वे दोनों /procफाइलसिस्टम के माध्यम से पढ़ते हैं , और प्रत्येक पाईड (डायरेक्टरी) के लिए, अपने नाम या अन्य विशेषताओं द्वारा प्रक्रिया की पहचान करने के लिए एक तरह से पथ का पता लगाता है। यह कैसे किया जाता है यह तकनीकी रूप से बोल रहा है, कर्नेल और सिस्टम विशिष्ट है। सामान्य तौर पर, वे पढ़ते हैं /proc/<PID>/statजिसमें से 2 क्षेत्र के रूप में कमांड का नाम होता है। के लिए pkill -fऔर pgrepजांच /cmdlineप्रत्येक पीआईडी के proc प्रवेश के लिए प्रवेश।

pkillऔर सिस्टम कॉल का pgrepउपयोग readprocकरें, जबकि killallनहीं करता है। यदि कोई प्रदर्शन अंतर है, तो मैं नहीं कह सकता: आपको अपने स्वयं के बेंचमार्क को देखना होगा।


2

किल एंड किलॉल ऐसे उपकरण हैं जो एक प्रक्रिया को मारने का एक तरीका प्रदान करते हैं। पहला इसके पीआईडी ​​द्वारा, दूसरा इसके नाम से। pgrep (सूची) और pkill (डिफ़ॉल्ट रूप से मारें) ऐसे उपकरण हैं, जो इसके नाम या अन्य विशेषताओं द्वारा प्रक्रिया को संदेश भेजने का एक तरीका प्रदान करते हैं देखें: http://linux.die.net/man/1/pkill के बारे में अधिक जानकारी के लिए संकेत: http://linux.die.net/man/7/signal


क्या आपके कहने killallका मतलब किसी प्रक्रिया को उसके नाम से मारना है? और यह इस उद्देश्य के लिए pgrep का उपयोग करता है? और killallबच्चे की सभी प्रक्रियाओं को भी मारता है? क्या संकेत killallडिफ़ॉल्ट रूप से उपयोग करता है?
एजाज अहमद खान

3
... जब तक आप सोलारिस पर नहीं होते, उस स्थिति में आप सभी प्रक्रियाओं killallको मार देंगे , जिसे आपको मारने का अधिकार है, ताकि यदि आप जड़ हैं, तो आप प्रभावी रूप से सर्वर को रिबूट कर रहे हैं।
जेनी डी

1
हां: killall chromiumक्रोमियम प्रक्रिया को मार देगा, pgrep chromiumआपको पीआईडी ​​सूची pkill chromiumदेगा , क्रोमियम को मार देगा। किलॉल डिफ़ॉल्ट SIGTERM सिग्नल (pkill के रूप में)
dervishe
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.