जवाबों:
ps aux
पूर्ण कमांड लाइन (पथ और पैरामीटर) शामिल है, जबकि pgrep केवल निष्पादन योग्य के नामों के पहले 15 वर्णों को देखता हैps aux
प्रत्येक प्रक्रिया की पूरी कमांड लाइन लौटाता है, जबकि pgrep
केवल निष्पादकों के नामों को देखता है।
इसका मतलब है कि ग्रेपिंग ps aux
आउटपुट किसी भी चीज से मेल खाएगा जो कि किसी प्रक्रिया के मापदंडों या मापदंडों में होता है 'बाइनरी: उदा'
ps aux | grep php5
मैच होगा /usr/share/php5/i-am-a-perl-script.pl
pgrep php5
नहीं होगामेरे सिस्टम से एक उदाहरण लें - केवल हम इसके बजाय अजगर का उपयोग करेंगे php5
:
ps aux | grep python
हमें देता है:izx 2348 0.0 0.7 514928 15644? Sl Jun24 0:00 / usr / bin / python / usr / lib / एकता-लेंस-वीडियो / एकता-लेंस-वीडियो izx 2444 0.0 0.9 547392 18864? Sl Jun24 0:01 / usr / bin / python / usr / lib / एकता-गुंजाइश-वीडियो-रिमोट / एकता-गुंजाइश-वीडियो-रिमोट रूट 2805 0.0 0.5 95436 12204? एस जुन 24 0:00 / यूएसआर / बिन / अजगर / यूएसआर / लिब / सिस्टम-सर्विस / सिस्टम-सर्विस-डी izx 6272 0.0 2.9 664400 60320? SNL Jun24 1:16 / usr / bin / python / usr / bin / update-manager -no-focus-on-map रूट 11729 0.0 0.9 180508 19516? एस जून 25 0:00 पायथन / यूएसआर / लिब / सॉफ्टवेयर-प्रॉपर्टीज / सॉफ्टवेयर-प्रॉपर्टीज-डबस
pgrep python
केवल वही रिटर्न 11729
, जो आप उपरोक्त सूची से देखेंगे:रूट 11729 0.0 0.9 180508 19516? एस Jun25 0:00 अजगर / usr / lib / सॉफ्टवेयर-गुण / सॉफ्टवेयर-गुण-दास
/proc/<pid>/stat
लेकिन इससे नहीं/proc/<pid>/cmdline
। ठीक है, @ टॉर्सन, आप बग स्प्रे जीतते हैं, यह एक बग है: पी
pgrep
एक अनुचित आदेश नहीं है। यह अच्छी तरह से और डिजाइन के अनुसार काम करता है। मुद्दा बस यह है कि आप एक विकल्प याद कर रहे थे जब आप इसे चलाते हैं, तो आप इसके pgrep
लिए दोष नहीं दे सकते । उपयोग ps aux | grep xxx
अविश्वसनीय है इसलिए grep
आउटपुट से खुद को फ़िल्टर करने के लिए हैक्स की आवश्यकता होती है और इसके साथ गलत सकारात्मकता दे सकते हैं ps aux | grep root
।
ps aux | grep x
आदेश से "बेहतर" परिणाम देता है pgrep x
अनिवार्य रूप से, क्योंकि यदि आप बाद के साथ एक विकल्प याद कर रहे हैं।
केवल पूर्ण कमांड लाइन को खोजने के -f
लिए विकल्प का उपयोग करें pgrep
और न केवल प्रक्रिया का नाम जो कि उसका डिफ़ॉल्ट व्यवहार है, जैसे:
pgrep -f php5
ps | grep
निर्माण के विपरीत जिसके साथ आपको grep
लाइन को फ़िल्टर करने या पैटर्न ट्रिक्स का उपयोग करने की आवश्यकता होती है , pgrep
बस खुद को डिज़ाइन द्वारा नहीं चुना जाएगा।
इसके अलावा, आपका पैटर्न ps
USER
कॉलम में दिखना चाहिए , आपको आउटपुट में अवांछित प्रक्रियाएं मिलेंगी, pgrep
इस दोष से ग्रस्त नहीं होना चाहिए।
यदि आप केवल pids के बजाय पूर्ण विवरण चाहते हैं, तो आप इसका उपयोग कर सकते हैं:
ps wup $(pgrep -f python)
जो सरल और अधिक विश्वसनीय है
ps aux | grep python | grep -v grep
या
ps aux | grep p[y]thon
-a
( --list-full
) विकल्प भी न जोड़ें । (पुराने pgrep के पास नहीं था -a
, इस पर किया-fl
।)
pgrep
अच्छा समाधान प्राप्त करने की कोशिश कर रहे हैं। +1
/proc/self/cmdline
"वर्णनात्मक" होने के लिए संशोधित होते हैं, pgrep -fa ruby
उदाहरण के लिए मेल नहीं खाते। puma 3.3.0 (tcp://localhost:3000) [MIQ: Web Server Worker]
, जबकि "डम्बर" pgrep -a ruby
होगा। निश्चित नहीं कि बाद वाले को मूर्ख भी बनाया जा सकता है।
pgrep
और ps
।
इस समय, ps
अधिक पूर्ण आउटपुट देगा pgep -f
क्योंकि pgrep पहले 4,096 वर्णों तक सीमित है (अक्सर जावा उपयोगकर्ताओं को एक लंबे वर्गपथ वाले जावा प्रोग्राम की प्रविष्टि कक्षा की तलाश में प्रभावित करता है)। इस पर नज़र रखने वाला बग है: https://gitlab.com/procps-ng/procps/issues/86