"Ps -u" वास्तव में एक बुरा सिंटैक्स है?


75

IMHO ps -uएक बहुत ही उपयोगी आउटपुट दिखाता है, इससे बहुत बेहतर ps -u $USER:

$ ps -u
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
elastic   234897  0.0  0.0 105980  1336 pts/2    S+   Oct10   0:00 /bin/bash ./run.sh collector-json-1.conf
elastic   234899 48.7  7.1 10087120 4433104 pts/2 Sl+ Oct10 2804:11 /usr/java/jdk1.7.0_09_x64/bin/java -Xmx6144m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatin
:

की तुलना में

$ ps -u $USER
    PID TTY          TIME CMD
 234897 pts/2    00:00:00 run.sh
 234899 pts/2    1-22:44:04 java
:
  1. लेकिन, यह "खराब वाक्य रचना" क्यों है? /usr/share/doc/procps-3.2.8/FAQज्यादा मदद नहीं करता है।
  2. ठीक उसी आउटपुट को प्राप्त करने के लिए "उचित वाक्यविन्यास" क्या होगा?

मामले में यह महत्वपूर्ण है:

$ uname -a
Linux h22k34.local 2.6.32-042stab044.17 #1 SMP Fri Jan 13 12:53:58 MSK 2012 x86_64 x86_64 x86_64 GNU/Linux

5
और अब कठिन भाग के लिए: कौन सा उत्तर चेकमार्क प्राप्त करना चाहिए?
sjngm

वास्तव में मुझे लगा कि मुझे आपको, उपयोगकर्ताओं को निर्णय लेने देना चाहिए। उच्च उत्थान वाले व्यक्ति को इसे प्राप्त करना चाहिए। लेकिन, आप इसे आसान नहीं बना रहे हैं;)
sjngm

6
जब दोनों उत्तर समान रूप से अच्छे होते हैं, तो मैं दोनों को बढ़ाता हूं, और उपयोगकर्ता को निचले प्रतिनिधि के साथ चेकमार्क देता हूं, खासकर जब अंतर 100k से अधिक हो।
फ्रैंक थॉमस

1
@FrankThomas किया :)
sjngm

SysV- आधारित प्रणालियों पर (या जिनकी psचीजें उस लाइन से आती हैं), मैं अक्सर उपयोग करता हूं ps -fu $USER... ps -fआउटपुट स्वरूपण प्राप्त करना जो कुछ हद तक ps uप्रारूपण के समान है , फिर भी निर्दिष्ट-ए-उपयोगकर्ता चीज़ प्राप्त करना। मामले में आप दोनों एक ही समय में चाहते थे।
lindes-hw

जवाबों:


130

सही सिंटैक्स, जो समान आउटपुट देता है , वह होगा:

ps u

एक अच्छा कारण है कि आधुनिक वाक्यविन्यास psएक गड़बड़ है। ऐतिहासिक रूप से, दो असंगत संस्करण थे ps। एक प्रमुख डैश के विकल्प एटी एंड टी यूनिक्स संस्करण से विरासत में मिले थे ps। प्रमुख डैश के बिना विकल्प बीएसडी से विरासत में मिले थे। psआमतौर पर उपयोग किए जाने वाले लिनक्स वितरण का संस्करण जीएनयू है जिसने विकल्पों के दोनों सेटों को एक साथ मिला दिया है, साथ ही इसके विकल्पों का अपना सेट भी जोड़ा है जो एक अग्रणी डबल-डैश के साथ शुरू होता है।

इस प्रकार, ps uबीएसडी शैली है और ps -u $USERएटी एंड टी शैली है। यह तथ्य कि जीएनयू psआपको चलाने की अनुमति देता है ps -uऔर, चेतावनी के अलावा, एक ही आउटपुट प्राप्त करता है, जिससे ps uपता चलता है कि जीएनयू एक खराब स्थिति का सबसे अच्छा प्रयास कर रहा है।


दरअसल, गड़बड़ी का कोई अच्छा कारण नहीं है। कई बुरे हैं, और "जीएनयू" और "बीएसडी" के कथित द्वैध एक लिनक्स मैनुअल पेज द्वारा प्रस्तावित एक पतन है। Unix.stackexchange.com/a/511530/5132 देखें ।
जेडबीपीपी

84

psआदेश ऐतिहासिक BSD और सिस्टम V यूनिक्स में बेतहाशा अलग वाक्य रचना की थी।

  • में बीएसडीps , uविकल्प (कोई पानी का छींटा) कोई पैरामीटर लेता है और अतिरिक्त कॉलम के साथ "उपयोगकर्ता उन्मुख उत्पादन" को दर्शाता है।

  • में SunOSps , -uविकल्प (पानी का छींटा के साथ) पैरामीटर के रूप में एक उपयोगकर्ता नाम लेता है और केवल, लेकिन प्रदर्शन स्वरूप को बदले बिना कि उपयोगकर्ता के स्वामित्व की प्रक्रिया भी शामिल है।

(एक अन्य बहुत ही सामान्य उदाहरण के रूप में, BSD का eअर्थ है "पर्यावरण दिखाएं", जबकि SunOS का -eअर्थ है "सभी की प्रक्रियाएँ दिखाएं"।)

लिनक्स प्रॉप्स ps दोनों शैलियों का समर्थन करने की कोशिश करता है। तो अगर आप 'पानी का छींटा' विकल्प का उपयोग -u, यह इसके SunOS "फिल्टर इस प्रयोक्ता" विकल्प, होने की उम्मीद करेंगे नहीं बढ़ाया कॉलम विकल्प। हालांकि, दोनों अक्सर भ्रमित होते हैं, हालांकि, इसका मतलब यह है कि आप व्हाट्स यू मीन का प्रयास करते हैं - यदि उपयोगकर्ता नाम गायब है, तो यह मान लेगा कि आपने इसे बीएसडी विकल्प दिया था लेकिन सनोस सिंटैक्स का उपयोग किया था।

(वास्तव में इतने अलग-अलग रूप थे psकि मिक्स में "व्यक्तित्व" की एक वास्तविक तालिका है। अस्पष्ट व्यवहार को एक शैली या किसी अन्य या फिर किसी अन्य के रूप में व्याख्या करने के लिए मजबूर करने के लिए - "UNIX95", "CMD_ENV" जैसे नॉब्स के अलावा , "_XPG", "I_WANT_A_BROKEN_PS" ...)


29
"I_WANT_A_BROKEN_PS" हा।

42
... सबसे पहले, मैंने सोचा कि यह एक मजाक था। लेकिन नूओ ...
इजाकाता

9
हम्म, जैसा कि यह पता चला है, यह ओपी देख रही चेतावनियों के "अस्पष्ट उपयोग" को छिपाने का विकल्प है।
ग्रिटिटी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.