हेडर के साथ पीएसपी आउटपुट कैसे प्राप्त करें


26

मैं हेडर के साथ पीएस आउटपुट को कैसे प्राप्त कर सकता हूं?

ये दोनों प्रक्रिया मेरे सर्वर पर चल रहे एक ऐप को बनाती है ...।

root     17123 16727  0 16:25 pts/6    00:00:00 grep GMC
root     32017     1 83 May03 ?        6-22:01:17 /scripts/GMC/PNetT-5.1-SP1/PNetTNetServer.bin -tempdir /usr/local/GMC/PNetT-5.1-SP1/tmpData -D

इसका 6-22:01:17मतलब है कि यह 6 दिनों से चल रहा है? मैं यह निर्धारित करने की कोशिश कर रहा हूं कि यह प्रक्रिया कितनी लंबी है ...

क्या दूसरा कॉलम प्रक्रिया आईडी है? तो अगर मैं kill 32017इसे 2 प्रक्रिया को मार दूंगा?

जवाबों:


37
ps -ef | egrep "GMC|PID"

"जीएमसी" को बदलें और psआवश्यकतानुसार स्विच करें।

उदाहरण आउटपुट:

root@xxxxx:~$ ps -ef | egrep "disk|PID"

UID        PID  PPID  C STIME TTY          TIME CMD
paremh1  12501 12466  0 18:31 pts/1    00:00:00 egrep disk|PID
root     14936     1  0 Apr26 ?        00:02:11 /usr/lib/udisks/udisks-daemon
root     14937 14936  0 Apr26 ?        00:00:03 udisks-daemon: not polling any devices

8
यह काम करता है 'क्यों' पर कुछ जानकारी जोड़ने के लिए अच्छा होगा।
एलिजा लिन

2
नहीं, यह उपयोगकर्ता के लिए एक अभ्यास है।
हायपी

@ElijahLynn यह हेडर में पाठ से मेल खाता है - इस मामले में, पीआईडी। लेकिन आप इसे UID, PTIME, या हेडर के अलावा किसी और चीज के लिए स्वैप कर सकते हैं ...
बेन क्रीसी

5
इसलिए ps -eसभी प्रक्रियाओं का चयन करता है, और ps -fपूर्ण-प्रारूप लिस्टिंग है जो कॉलम हेडर दिखाता है। फिर हम कॉलम हेडर और आउटपुट को egrep पर पाइप करते हैं, जिसे grep बढ़ाया जाता है और पाइप |को एक विशेष अर्थ रखने की अनुमति देता है, जो OR (यह या वह) है। तो आप कॉलम हेडर में पीआईडी ​​से मेल खाते हुए प्लस आउटपुट लाइनें जो मायने रखते हैं।
एलिय्याह लिन

मुझे Ubuntu / 16.04 में egrep / grep -E कमांड में सरल उद्धरण चिह्नों का उपयोग करना था, जैसे: ps -ef | grep -E 'GMC|PID'
Vlax

13

Geekosaur के लिए धन्यवाद, मैं इस आदेश का उपयोग आपकी मांगों के लिए करना चाहूंगा, बजाय एक अलग आदेश के:

ps -ef | head -1; ps -ef | grep "your-pattern-goes-here"

मुश्किल "का उपयोग करना है?" कमांड को चेन करने के लिए शेल द्वारा समर्थित।


यह क्लीनर और स्वीकृत उत्तर की तुलना में अधिक मजबूत है। यह इस बात की पुष्टि नहीं करता है कि शीर्ष लेख में PID है और यह grep स्ट्रिंग में जटिलता नहीं जोड़ता है।
7yl4r

2
ओह रुको ... आपने ps -efदोहराया है। इससे भी बेहतर हैps -ef | { head -1 ; grep "your-pattern" ; }
7yl4r

@ 7yl4r ने कभी भी उस शेल की क्षमता का उपयोग नहीं किया है। मैंने आपकी बेहतर कमांड की कोशिश की, पूरी तरह से काम करता है! समझ गया, :)
विक लाउ

3
अन्य लोगों की जिज्ञासा के लिए 'ग्रुपिंग कमांड्स' नामक इस टेक्निक के
Vic Lau

@ 7yl4r बढ़िया तकनीक! मैं देख रहा था कि कैसे कमांड को दोहराना नहीं है। समूहीकृत कमांड को भी पाइप किया जा सकता है ps -ef | { head -1; grep "pattern" | head -5; }:। उपयोगी अगर पैटर्न grep-ed के बहुत सारे परिणाम हैं!
आदी

6

दूसरा कॉलम प्रक्रिया आईडी है; 4 वें जब प्रक्रिया बनाई गई थी (यह आमतौर पर आपके कार्यक्रम शुरू होने का समय होता है, लेकिन हमेशा नहीं; विचार execve()और दोस्तों); 6 वां समय सीपीयू की खपत की मात्रा है। तो यह 8 दिनों के लिए चल रहा है और लगभग 7 दिनों के CPU समय का उपयोग किया गया है, जिसे मैं चिंताजनक मानूंगा।

एक ही आह्वान में हेडर प्राप्त करना सबसे अच्छा मुश्किल है; मैं बस एक अलग करूँगा ps | head -1। आप psअपने स्वयं के चयन के तरीकों या pgrepइसके बजाय जैसे कुछ का उपयोग करने पर विचार कर सकते हैं grep, जो वास्तव में हेडर के माध्यम से पारित करने के लिए डिज़ाइन नहीं किया गया है।


क्या है 83?
वेबनेट

वर्तमान प्रक्रिया प्राथमिकता, जो इसके पिछले सीपीयू और आई / ओ उपयोग और उपयोगकर्ता- या सिस्टम द्वारा निर्दिष्ट niceमूल्य पर आधारित है। छोटी संख्या अधिक प्राथमिकता है। इस मामले में, grepप्राथमिकता 0 है क्योंकि यह डिस्क रीड पर अवरुद्ध था और इसके आउटपुट को लिखने के लिए प्राप्त किया गया था, और PNetTNetServer.binयह एक बड़ी संख्या है क्योंकि यह लगातार बिना अवरोध के अपने समय का उपयोग करता है। (निर्धारण जटिल है और विवरण उपयोग किए जा रहे सटीक अनुसूचक पर निर्भर करेगा।)
geekosaur

5

Egrep समाधान सरल और उपयोगी है, लेकिन निश्चित रूप से आप हेडर पर निर्भर करते हैं जिसमें हमेशा 'PID' (उचित धारणा से अधिक, हालांकि) होता है और एक ही स्ट्रिंग कहीं और नहीं आ रहा है। मैं यह अनुमान लगा रहा हूं कि यह आपकी आवश्यकताओं के लिए पर्याप्त है, लेकिन अगर कोई चाहता है कि वहाँ एक विकल्प है, तो वह sed है।

सेड आपको केवल यह कहता है कि "पहली पंक्ति को प्रिंट करें, फिर किसी भी लाइन को पैटर्न से जोड़ें"। उदाहरण के लिए:

ps auxwww | sed -n '1p; /PROCESS_NAME_TO_SEARCH/p;'

/sed -n/d;फ़िल्टर सेड को स्वयं जोड़ें :

ps auxwww | sed -n '1p; /sed -n/d; /PROCESS_NAME_TO_SEARCH/p;'

/sed -n/dसही नहीं है। कुछ मौजूदा कमांड हो सकते हैं sed -n, जिन्हें आप प्रिंट करना चाहते थे। ट्रिक का उपयोग करना है sed -n '1p; /[P]ROCESS_NAME_TO_SEARCH/p'। ;-) []खोज स्ट्रिंग में किसी भी वर्ण के चारों ओर ध्यान दें ।
ऐशसेन

4

आसान विकल्प: ps -ef | { head -1; grep GMC; }

उस नंबर को प्रतिस्थापित करें जिसकी संख्या आपके हेडर पर प्रदर्शित है।


1
मुझे यह दृष्टिकोण पसंद है लेकिन कमांड को अंत में एक और अर्धविराम की आवश्यकता है। ps -ef | { head -1; grep GMC; }। इसके अलावा मुझे यह एक फंक्शन में पसंद है जैसे कि:function pgrep() { ps -ef | { head -1; grep $@; } }
ब्रेट

1

आप pgrep के साथ pid पा सकते हैं

pgrep PNetTNetServer

और फिर पीआईडी ​​के साथ पीएस का उपयोग करें

ps u 12345

या यहां तक ​​कि दोनों को एक कमांड में मिलाएं

ps u `pgrep PNetTNetServer`

यह आपको इच्छित लाइन दिखाएगा, और हेडर शामिल करेगा।


0

मैंने एक छोटा सा पर्ल प्रोग्राम लिखा, जो छपेगा

  • पहली पंक्ति और सभी मिलान, अगर कोई मैच हैं, या
  • कुछ नहीं, अगर मैच नहीं हैं।

मैं अक्सर इसका उपयोग करता हूं ps | 1andre GMC, लेकिन यह फ़ाइल तर्क भी ले सकता है (प्रत्येक फ़ाइल उस फ़ाइल से लाइनों पर किए गए मैचों के लिए अपनी हेडर लाइन प्रदान करती है)।



#!/usr/bin/perl

#
# 1andre <regexp> [<file> ...]
#
#   1 -           first ({1}st)
# and -                  {and}
#  re - (lines matching) {re}gexp
#
# If no <files> are given (or "-" is given as a <file>) stdin is
# used.
#
# If any lines from each <file> match the <regexp>, print the
# first line from that <file> and all the matching lines from
# that <file>.
#

use strict;
use warnings;

if(scalar @ARGV < 1) {
  printf STDERR "usage: %s <regexp> [<file> ...]\n", $0;
  exit 1;
}

my $re = shift;
my $header;

while(<>) {
  if($. == 1) {
    $header = $_;
  } elsif(m/$re/) {
    if(defined $header) {
      print $header;
      undef $header;
    }
    print;
  }
} continue {
  # close resets $. when we get to the end of each file that <> is processing
  close ARGV if eof;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.