पूर्ण प्रक्रिया जानकारी प्रदर्शित करने के लिए pgrep कैसे प्राप्त करें


26

क्या कोई तरीका है pgrepजिससे मुझे प्रत्येक प्रक्रिया के बारे में सारी जानकारी मिल psसकेगी? मुझे पता है कि मैं इसके psमाध्यम से पाइप कर सकता हूं, grepलेकिन यह बहुत अधिक टाइपिंग है और यह मुझे वह grepप्रक्रिया भी देता है जो मैं नहीं चाहता।

जवाबों:


22

pgrepआउटपुट विकल्प बहुत सीमित हैं। psमहत्वपूर्ण सूचनाओं को प्राप्त करने के लिए आपको लगभग निश्चित रूप से इसे वापस भेजने की आवश्यकता होगी । आप अपने में बैश फ़ंक्शन का उपयोग करके इसे स्वचालित कर सकते हैं ~/.bashrc

function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }

फिर कमांड से कॉल करें।

ppgrep <pattern>

2
धन्यवाद! मैंने इसे संशोधित किया: function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; } अन्यथा, यदि कोई प्रक्रिया आपकी खोज से मेल नहीं खाती है, तो यह संपूर्ण psउपयोग मेघालय को डंप करता है ।
जोएलफैन

ओएस एक्स पर, psझंडे के लिए एक हाइफ़न की आवश्यकता है:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
एरिक नॉमिच

1
यदि आप ps उपयोग पृष्ठ से बचना चाहते हैं, तो GNU xargs के पास एक विकल्प है, -rजो केवल एक सूची प्राप्त होने पर कमांड निष्पादित करेगा।
डग

1
अधिक संक्षिप्त तरीका हैps fp $(pgrep -d, "$@")
इगोर मिकुस्किन

14

का उपयोग कर के pgrepसाथ गठबंधन !psxargs

pgrep <your pgrep-criteria> | xargs ps <your ps options> -p

उदाहरण के लिए प्रयास करें

pgrep -u user | xargs ps -f -p

की एक पूरी प्रक्रिया सूची प्राप्त करने के लिए user

यह अच्छा है कि आप कॉलम नामों के साथ पहली पंक्ति रखें। grepहमेशा कॉलम नाम छोड़ता है।


अति उत्कृष्ट! के लिए xfvb ArcGIS सर्वर स्टार्टअप स्क्रिप्ट के साथ इस का निराकरण एक अजीब समस्या
prusswan

यह स्वीकृत उत्तर होना चाहिए, क्योंकि यह एक तरह से यूनिक्स पाइप का उपयोग करता है, एक उपकरण से पीआईडी ​​की सूची ले रहा है और दूसरे में वापस खिला रहा है (यदि यह हैकरी की तरह लगता है, तो यह नहीं है - इस तकनीक का उपयोग UNIX उपकरणों के बहुत सारे में किया जा सकता है , ईमेल grep टूल्स की तरह। बैश फ़ंक्शन ppgrep () एक अनावश्यक निर्भरता है, और यहां प्रस्तुत सीखने के अवसर का सामना करने से बचा जाता है।)
स्कॉट

10

निम्नलिखित केवल आपको PID + पूर्ण कमांड-लाइन देता है। "सभी जानकारी psकरता है" के लिए, अन्य उत्तर देखें ...

अधिकांश linuxes procps-ng का उपयोग करते हैं । चूंकि 3.3.4 (2012 में जारी), pgrep -a( --list-full) पूर्ण कमांड लाइन दिखाता है।
नोट: डिफ़ॉल्ट pgrep द्वारा केवल उस पैटर्न से मेल खाता है जिसे आप निष्पादन योग्य नाम के विरुद्ध देते हैं। यदि आप पूर्ण कमांड लाइन के विरुद्ध मिलान करना चाहते हैं (जैसा कि grepping ps करता है), -f( --full) विकल्प जोड़ें ।

पुराने संस्करणों में (मूल प्रॉप्स प्रोजेक्ट सहित ), -lविकल्प ने जानकारी दिखाई , लेकिन यह व्यवहार भिन्न है:

  • pgrep -fl पूर्ण कमांड लाइन के खिलाफ पैटर्न का मिलान किया और पूरी कमांड लाइन दिखाई।
  • pgrep -lअकेले ने केवल निष्पादन योग्य नाम का मिलान किया और केवल निष्पादन योग्य नाम दिखाया।
    यदि आप पूरा मैच नहीं चाहते हैं, तो आप पूरी कमांड लाइन नहीं देख सकते :-( [ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15 ]

निश्चित नहीं है कि कोड * बीएसडी का उपयोग क्या है, लेकिन उनके आदमी पृष्ठ पुराने -flव्यवहार का दस्तावेजीकरण करते हैं।

दुर्भाग्य से आप -flहाल ही में procps-ng, -f( --list-name) में हमेशा उपयोग नहीं कर सकते हैं केवल निष्पादन योग्य नाम प्रिंट करता है।


4

लिनक्स

के GNU संस्करण के pgrepलिए -i(केस-इन्सेंसिविटी) समर्थित नहीं है, और लंबे + फ़ज़ी आउटपुट के साथ प्राप्त किया जाता है -af

$ pgrep -af apache

OUTPUT:
    1748 /usr/sbin/apache2 -k start

मैन पेज :

   -a, --list-full
       List  the  full  command line as well as the process ID.  (pgrep only.)

   -f, --full
       The pattern is normally only matched against the process name.  
       When -f is set, the full command  line is used.

मैक ओ एस

OSX पर (और बीएसएनडी पर) -l( लंबे आउटपुट ) के साथ संयोजन में -f( पूर्ण तर्क सूचियों के खिलाफ मैच ) पूरा कमांड प्रदर्शित करेगा ( -iकेस-असंवेदनशीलता जोड़ता है):

$ pgrep -fil ssh

OUTPUT:
    33770 ssh: abc@192.168.0.123-22 [mux] t

आदमी पेज :

 -l          Long output.  For pgrep, print the
             process name in addition to the
             process ID for each matching
             process.  If used in conjunction
             with -f, print the process ID and
             the full argument list for each
             matching process.  For pkill, dis-
             play the kill command used for
             each process killed.

1

Grep के लिए -v विकल्प का उपयोग करें - यह अनुरोधित पैटर्न के तहत सब कुछ लौटाता है।

ps -ef | grep <process> | grep -v grep

यह मेरे लिए सबसे अच्छा जवाब था। यह आपको छोटा कर दिया जा रहा है बिना पूर्ण आदेश से पता चलता के रूप में यह के साथ होता हैpgrep -u user | xargs ps -f -p
BringBackCommodore64

0

मुझे नहीं लगता कि आपके द्वारा प्राप्त की जाने वाली सबसे अधिक जानकारी है, नाम और प्रक्रिया आईडी -l विकल्प का उपयोग करके pgrep।

ps सभी प्रकार के स्वरूपण विकल्पों का समर्थन करता है, इसलिए मैं सिर्फ एक उपनाम बनाना चाहूंगा कि आप टाइपिंग को सहेजना क्या चाहते हैं। grep -v grepकिसी भी grep प्रक्रियाओं को बाहर करने के लिए अतिरिक्त पाइप को शामिल करने के लिए आउटपुट से grep प्रक्रिया को बाहर करने का एक सरल तरीका ।


0

grepप्रक्रिया को खत्म करने के लिए , आप अपने पैटर्न के हिस्से के रूप में कोष्ठक का उपयोग कर सकते हैं:

ps -ef | grep '[t]ty'

आप इसके साथ कर सकते हैं psऔर pgrep:

ps -fp $(pgrep -d, tty)

-1

इससे मुझे अनुमान लगाने में मदद मिलेगी:

पी एस ऑकवा


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