किसी विशिष्ट प्रक्रिया के लिए केवल उपयोगकर्ता, पीआईडी ​​और कमांड कैसे प्राप्त करें? (उबंटू ११.१०)


17

जब मैं करता हूं ps -ef|grep python मुझे निम्नलिखित मिले:

myusername  4492  2994  0 10:32 pts/0    00:00:01 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root        6665     1  0 10:42 ?        00:00:00 /usr/bin/python /usr/lib/system-service/system-service-d
myusername 14051 13497  0 11:28 pts/7    00:00:00 grep --color=auto python

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

myusername  4492 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root        6665 /usr/bin/python /usr/lib/system-service/system-service-d

क्या यह काम करता है? ps --fields="user pid command"
pratnala

यह कोशिश नहीं की। नेट पर मिला। अब उबंटू मशीन के पास नहीं। माफ़ कीजिये। बाद में देखेंगे और आपको बताएंगे
pratnala

नहीं, मुझे ERROR मिलता है: अज्ञात ग्नू लंबा विकल्प क्या यह आपके लिए काम करता है?
Bentley4

जवाबों:


12

मुझे लगता है कि आप -o तर्क की तलाश कर रहे हैं:

-तो प्रारूप:

उपयोगकर्ता द्वारा परिभाषित प्रारूप।   प्रारूप एक के रूप में एक तर्क है   रिक्त-पृथक या अल्पविराम से अलग की गई सूची, जो प्रदान करती है a   व्यक्तिगत आउटपुट कॉलम निर्दिष्ट करने का तरीका।   मान्यता प्राप्त कीवर्ड मानक में वर्णित हैं   नीचे दिए गए विवरण अनुभाग। हेडर का नाम बदला जा सकता है   (ps -o pid, ruser = RealUser -o comm = Command) इच्छानुसार।   यदि सभी कॉलम हेडर खाली हैं (ps -o pid = -o comm =)   फिर हेडर लाइन आउटपुट नहीं होगी। स्तंभ की चौड़ाई   विस्तृत हेडर के लिए आवश्यकतानुसार बढ़ेगा; यह हो सकता है   WCHAN जैसे स्तंभों को चौड़ा करने के लिए उपयोग किया जाता है   (ps -o pid, wchan = WIDE-WCHAN-COLUMN -o comm)। मुखर   चौड़ाई नियंत्रण (ps opid, wchan: 42, cmd) भी पेश किया जाता है।   Ps -o pid = X, comm = Y का व्यवहार भिन्न होता है   व्यक्तित्व; आउटपुट "X, comm = Y" नामक एक कॉलम हो सकता है   या "X" और "Y" नाम के दो कॉलम। एकाधिक -o का उपयोग करें   जब संदेह में विकल्प। PS_FORMAT वातावरण का उपयोग करें   वांछित के रूप में एक डिफ़ॉल्ट निर्दिष्ट करने के लिए चर; DefSysV और   DefBSD मैक्रोज़ हैं जिन्हें चुनने के लिए इस्तेमाल किया जा सकता है   डिफ़ॉल्ट UNIX या BSD कॉलम।

तो आप चाहते हैं कि कमांड (उबंटू) होगी

ps -o uid,pid,cmd -ef|grep python

OpenSolaris के तहत कमान है:

ps -o ruser,pid,comm -ef|grep python

2
क्या यह वास्तव में आपके लिए काम करता है? जब मुझे वह कमांड मिलती है, तो मुझे मिलता है Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
Bentley4

हाँ यह OpenSolaris के तहत ksh में मेरे लिए काम करता है। आउटपुट आपकी इच्छानुसार है ... अपने सिस्टम पर ps के लिए मैन पेज चेक करें man ps। हो सकता है कि सिंटैक्स आपके सिस्टम पर थोड़ा अलग हो।
Simon

1
लेकिन ओपी बैश पर है न कि ksh पर
pratnala

1
@ बेंटले 4 यदि आप केवल कमांड चाहते हैं और आपको अतिरिक्त जानकारी की आवश्यकता नहीं है, तो आप -f तर्क को छोड़ सकते हैं और निम्नलिखित कमांड का उपयोग कर सकते हैं: ps -o uid,pid,cmd -e|grep python
Simon

1
@ Bentley4: ps -o user,pid,cmd -e|grep '[p]ython'
Simon

3

सबसे सरल शायद होगा:

$ ps o uid=,pid=,cmd= -C python
1000 26126 python

इस तरह से आपको सब कुछ सीधे मिल जाता है ps और कुछ भी पार्स करने की जरूरत नहीं है।

वहाँ से ps आदमी पृष्ठ:

-तो स्वरूप

उपयोगकर्ता द्वारा परिभाषित प्रारूप। प्रारूप एक रिक्त-पृथक या अल्पविराम से अलग सूची के रूप में एक एकल तर्क है, जो व्यक्तिगत आउटपुट कॉलम को निर्दिष्ट करने का एक तरीका प्रदान करता है। [...] शीर्षकों का नाम बदला जा सकता है (ps -o pid, ruser = RealUser -o comm = Command) इच्छानुसार। यदि सभी कॉलम हेडर खाली हैं (ps -o pid = -o comm =) तो हेडर लाइन आउटपुट नहीं होगी।

-C cmdlist
     Select by command name.  This selects the processes whose executable 
     name is given in cmdlist.

-C यदि आप चल रहे हैं तो विकल्प काम करेगा python अंतःक्रियात्मक, यदि अजगर एक स्क्रिप्ट चला रहा हो तो नहीं उस स्थिति में आपको उपयोग करना चाहिए -C scriptname.py बजाय।


1

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

ps ef | cut -c1-16,50-   

आपके पीएस स्टेटमेंट की प्रत्येक पंक्ति से 1-16 और 50 के बाद के अक्षर प्रदान करेगा। (आपकी वास्तविक संख्या को शायद थोड़ी मालिश की आवश्यकता होगी)।

ऐसा करने का एक और तरीका (लेकिन आप स्वरूपण खो देंगे) हो सकता है

ps ef | tr -s " " | cut -f1,2,8- -d" "

जो पीएस कमांड में व्हाट्सएप को कंप्रेस करेगा, उसके बाद 1,2 और 8 को फील्ड में ले जाकर डिस्प्ले करेगा।


केवल एक प्रक्रिया के लिए मुझे उन आदेशों के साथ पूर्ण स्क्रीन पर जानकारी का आधा पृष्ठ मिलता है। यह बहुत ही अपठनीय है, मैं मापदंडों की 'मसाज' कर रहा हूं लेकिन अभी तक मुझे जो भी चाहिए, उसका मैं दूर से कुछ हासिल नहीं कर पाया।
Bentley4

0
ps -eo user,pid,cmd | grep [p]ython

उदाहरण:

$ ps -eo user,pid,cmd | grep [p]ython
root      1056 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root      1735 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
bmaupin  16613 /usr/bin/python3 /usr/share/system-config-printer/applet.py

स्पष्टीकरण:

  • -e सभी प्रक्रियाओं
  • -o उपयोगकर्ता द्वारा परिभाषित प्रारूप
  • user,pid,cmd उपयोगकर्ता, प्रक्रिया आईडी, कमांड कॉलम दिखाएं

ध्यान दें: यदि तुम प्रयोग करते हो -f साथ में -e जैसा कि दूसरों ने सुझाव दिया है, आपको त्रुटियाँ मिल सकती हैं। ऐसा इसलिए है क्योंकि ये दोनों पैरामीटर आउटपुट स्वरूप को नियंत्रित करते हैं, और उनमें से केवल एक का उपयोग किया जाना चाहिए:

$ ps --help | grep -A 2 "output format"
*********** output format **********
-o,o user-defined  -f full
-j,j job control   s  signal
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.