क्या `किल-पी` वास्तव में काम करता है?


11

इसके मैन पेज में killइस प्रकार लिखा है

SYNOPSIS

  kill [ -s signal | -p ] [ -a ] [ -- ] pid ...
  kill -l [ signal ]

  -p     Specify  that kill should only print the process id (pid) of the
          named processes, and not send any signals.

लेकिन जैसा कि मैंने आरएच और आरएचईएल दोनों में कई बार कोशिश की, कमान जैसे kill -s SIGHUP |-p 123कभी काम नहीं किया और एक त्रुटि हमेशा रिपोर्ट की जाती है

bash: -p: कमांड नहीं मिला

क्या मैंने कोई गलती की?


11
ध्यान रखें जब आप आदेश में टाइप, आप हटा दिया [ ]कोष्ठक, और प्रतिस्थापित signalके साथ SIGHUPऔर pidसाथ 123? आपने ऐसा क्यों किया? क्योंकि आप जानते हैं कि प्रतीक [, signalऔर pidशाब्दिक के बजाय मेटा-सिंटैक्टिक हैं। वे इंगित करते हैं कि वाक्यविन्यास क्या है। खैर, |प्रतीक एक ही बात है: सिंटैक्स का एक और मेटा-सिंटैक्टिक संकेतक। [a | b]का अर्थ है: वैकल्पिक सिंथैटिक आइटम, जो aया तो हो सकता है b(लेकिन दोनों नहीं है क्योंकि यह एक आइटम होना चाहिए)।
कज़

आपके निर्देश के लिए धन्यवाद। वैसे, आप उच्चारण कैसे करते हैं [a | b]?
user43312

हम्म। "वैकल्पिक ए या बी"।
कज़

जवाबों:


51
kill [ -s signal | -p ]

मैनुअल पेज में इस सिंटैक्स का अर्थ है:

आप उपयोग कर सकते हैं kill -s signal या आप उपयोग कर सकते हैं kill -p, लेकिन आप एक ही समय में -sऔर दोनों का उपयोग नहीं कर सकते -p

पाइप ( |) का अर्थ है (अनन्य) या प्रलेखन में, यह कमांड का हिस्सा नहीं है।

जब आप टाइप करें

foo | bar

अपने खोल में, इसे शुरू करने का प्रयास करेंगे fooऔर barपाइप, और के उत्पादन fooके लिए barकार्यक्रम। (वह शेल ऐसा कर रहा है, नहीं foo(या bar), |किसी भी प्रक्रिया को पारित नहीं किया गया है।) आपके मामले में, दूसरा भाग है -p 123, इसलिए शेल एक निष्पादन योग्य को खोजने का प्रयास करता है -pऔर उस त्रुटि संदेश के साथ विफल हो जाता है ।


धन्यवाद, @ मट। तो मैं जैसी आज्ञा देता हूं kill -p 123। यह कहता है bash: kill: p: invalid signal specification। और kill -p SIGINT 123यही बात कहता है। मुझे नहीं लगता कि सिंटैक्स के अनुसार सिग्नल लगाने की जगह है। क्या आपको बुरा लगता है अगर आप सिर्फ -pविकल्प के उपयोग का प्रदर्शन देते हैं ?
user43312

2
@ user43312: इसके लिए स्लम का उत्तर देखें
Mat

32

मुझे लगता है कि आप इस तथ्य पर फंस रहे हैं कि कमांड killके साथ बैश नामक बिलियन कमांड है kill

$ type -a kill
kill is a shell builtin
kill is /usr/bin/kill
kill is /bin/kill

वह आदमी पृष्ठ जिसे आप पढ़ रहे हैं, उसके killनीचे स्थित कमांड का उल्लेख कर रहा है /bin। इसे बुलाने के लिए पूर्ण पथ का उपयोग करें:

$ /bin/kill -p sleep
16486

संयोग /usr/bin/killसे सिर्फ एक लिंक है /bin/kill

$ ls -l /usr/bin/kill
lrwxrwxrwx 1 root root 14 Feb  9  2011 /usr/bin/kill -> ../../bin/kill

$ readlink -m /usr/bin/kill
/bin/kill

यह वास्तव में काम करता है। और मैं सभी डेमो के लिए सराहना करता हूं।
user43312

@ user43312 - एनपी। उदाहरण हमेशा मैन पेज 8- की तुलना में अनुसरण करने में आसान होते हैं।
slm
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.