मैं कैसे लिनक्स में एक प्रक्रिया को मारने का उपयोग किए बिना मार सकता हूं?


0

मैं कमांड का उपयोग किए बिना नौकरी # 3 को मारने वाला हूं kill %3। मैं उसको कैसे करू? मुझे इसका जवाब कहीं भी नहीं मिल रहा है। मैं केवल एक कमांड का उपयोग कर सकता हूं । मैं यह कार्य कैसे करूं?


वास्तव में इसके लिए सही साइट नहीं है, लेकिन जब से मैं यहाँ हूँ, आप इसका उपयोग कर सकते हैं top, हिट कर सकते हैं kऔर फिर टाइप कर सकते हैं PID।
— डेरेक

4
आपका प्रश्न पर्याप्त स्पष्ट नहीं है। शीर्षक "मार का उपयोग किए बिना" कहता है, लेकिन वर्णन "मार% 3" का उपयोग किए बिना कहता है। इसमे अंतर है। उदाहरण के लिए, आप जॉब नंबर के बजाय प्रोसेस आईडी के साथ किल का उपयोग कर सकते हैं। लेकिन यह आपके प्रश्न से स्पष्ट नहीं है कि यह स्वीकार्य है या नहीं।
— kaylum

4
आपको ऐसा करने के लिए कौन कह रहा है? क्यूं कर?
— स्पष्ट करें

1
इसके अलावा pkill linux.die.net/man/1/pkill
— स्पष्ट करें

2
यदि यह एक पाठ्यपुस्तक में एक समीक्षा प्रश्न है, तो वे जिस विशिष्ट उत्तर की तलाश कर रहे हैं, उसका एकमात्र तरीका पाठ्यपुस्तक के उस अध्याय को पढ़ना है।
— चार्ल्स डफी

जवाबों:


0

यह एक पाठ्यपुस्तक में एक समीक्षा प्रश्न है।

पाठ्यपुस्तक, और अन्य दस्तावेज़ों के बारे में बात करना काफी आसान है kill %3। और जहां वे करते हैं, यह काफी स्पष्ट है कि यह प्रश्न क्या हो रहा है। यह killकमांड के विकल्प पर नहीं मिल रहा है । यह शेल जॉब स्पेसर्स के बजाय प्रोसेस आईडी नंबरों का उपयोग करने पर नहीं मिल रहा है। यह इस पर हो रहा है:

पृष्ठभूमि में एक चल रहे कार्यक्रम को समाप्त करने के लिए, वह कार्य संख्या kill %nजहां nआप समाप्त करना चाहते हैं। उदाहरण के लिए, टाइपिंग kill %3नौकरी नंबर तीन को समाप्त करता है। कुछ कार्यक्रमों killको समाप्त करने के लिए कमांड से अधिक की आवश्यकता होती है। killइस वाक्य रचना के साथ कमांड की मारक शक्ति को मजबूत करें :kill -9 %n

- ब्रेंट डी। हेसलोप, डेविड एंगेल (1990)। मास्टरींग सनोस । Sybex। पी। 189

यह इस तथ्य पर हो रहा है कि कभी-कभी SIGTERMकाम नहीं करता है । इसलिए, इस धारणा पर कि यह काम नहीं किया है (क्योंकि प्रक्रिया ने पकड़ा और सिग्नल को समाप्त किए बिना संभाला है), आपको कुछ अलग सिग्नल भेजने की कोशिश करने की आवश्यकता है। पुस्तकें इसका उत्तर भी देती हैं:

एक अच्छा सामान्य नियम कोशिश करने के लिए है TERM, INTया HUPसंकेत पहले एक प्रक्रिया को रोकने के। यदि वे विफल होते हैं, तो KILLसिग्नल का उपयोग करें ।

- रॉबिन एंडरसन, एंडी जॉनसन (2002)। "दिन-प्रतिदिन की व्यवस्था प्रबंधन"। यूनिक्स फैलाया । Sams प्रकाशन। आईएसबीएन 9780672322518. पी। 404।

आगे की पढाई


2

एक बहुत ही सरल आदेश, यदि आप एक पृष्ठभूमि नौकरी को मारना चाहते हैं, तो killयह होगा:

kill $(jobs -p 3)

-p केवल pids को सूचीबद्ध करता है, और नंबर 3 जॉबस्पेक है।


ओह। यह मेरी तुलना में थोड़ा सरल है। मुझे जवाब देने से पहले हेल्प पेज पढ़ना चाहिए ...
— Glglgl

1
@tripleee ने संपादित किया =)
— chaos

ठेठ लिनक्स के गोले में, killऔर jobsदोनों कमांड हैं, इसलिए यह बताई गई आवश्यकता को पूरा नहीं करता है - "मैं केवल एक कमांड का उपयोग कर सकता हूं"।
— डेविड श्वार्ट्ज

1

आप हमेशा fg 3(# 3 भूमिगत नौकरी) कर सकते हैं और फिर इसे नियंत्रण-सी के साथ रद्द कर सकते हैं या कमांड से बाहर निकलने की सामान्य विधि जो भी हो।


शायद मांगा हुआ जवाब नहीं, लेकिन बहुत सीधी सोच है।
— त्रिकाल

1

समीक्षा प्रश्न आपको सोचने के लिए हैं; यदि वे उत्तर निकाय में स्पष्ट रूप से लिखे गए हैं तो वे बहुत अच्छे नहीं हैं। आप नौकरी के बारे में और क्या जानते हैं? क्या आप इसका नाम जानते हैं? क्या आप जानते हैं कि यह हाल ही में शुरू की गई नौकरी थी? यदि आप सभी जानते हैं कि यह नौकरी नंबर 3 है, तो स्पष्ट रूप से आपको इसे किसी तरह से संदर्भित करना होगा।

उनकी संख्या के अलावा अन्य नौकरियों को संदर्भित करने के कई तरीके हैं; से man bash:

शेल में किसी नौकरी को संदर्भित करने के कई तरीके हैं। चरित्र %एक नौकरी के नाम का परिचय देता है। जॉब नंबर के nरूप में संदर्भित किया जा सकता है %n। इसे शुरू करने के लिए उपयोग किए गए नाम के उपसर्ग का उपयोग करके या इसके कमांड लाइन में दिखाई देने वाले सबस्ट्रिंग का उपयोग करके एक नौकरी भी संदर्भित की जा सकती है। उदाहरण के लिए, %ceएक रुकी हुई ceनौकरी को संदर्भित करता है । यदि उपसर्ग एक से अधिक काम से मेल खाता है, तो बैश एक त्रुटि की रिपोर्ट करता है। %?ceदूसरी ओर, उपयोग करना , ceकमांड लाइन में स्ट्रिंग वाली किसी भी नौकरी को संदर्भित करता है । यदि विकल्प एक से अधिक कार्य से मेल खाता है, तो बैश एक त्रुटि की रिपोर्ट करता है। प्रतीकों %%और %+वर्तमान नौकरी के खोल की धारणा को संदर्भित करते हैं, जो कि पिछली नौकरी है, जबकि यह अग्रभूमि में था या पृष्ठभूमि में शुरू हुआ था। पिछली नौकरी का उपयोग करके संदर्भित किया जा सकता है%-। नौकरियों से संबंधित आउटपुट में (उदाहरण के लिए, जॉब कमांड का आउटपुट), वर्तमान जॉब को हमेशा ए +और पिछले जॉब को ए के साथ फ्लैग किया जाता है -। एक एकल %(बिना नौकरी के विनिर्देश के साथ) वर्तमान नौकरी को भी संदर्भित करता है।

यहां नौकरी के नाम विकल्पों की एक तालिका है , अगर यह पढ़ना आसान है।


0

आप pkill(या) killallफ़ंक्शन का उपयोग कर सकते हैं


यह असंबंधित प्रक्रियाओं की एक बड़ी संख्या को संभावित रूप से मारने का विशिष्ट नुकसान है। यदि आप करते हैं sleep & sleep & sleepतो killall sleepतीनों को मार देंगे, न केवल तीसरे (और वास्तव में, नौकरियों में से एक को बाहर करने का कोई तरीका नहीं है)।
— 6

@tripleee और न केवल इन तीनों, बल्कि अन्य लोगों को भी जो क्रोन की नौकरी द्वारा चलाए जा सकते हैं, शायद अच्छे कारणों के लिए ...
— Glglgl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.