On Mon, Jul 19, 2004 at 10:36:39AM +0300, Peter Pentchev wrote:
> On Mon, Jul 19, 2004 at 08:31:29AM +0200, Nickolay Kolev wrote:
> > Здравейте,
> > 
> > Написах си следното нещо, с което да мога да търся процеси:
> > 
> > #!/bin/sh
> > 
> > ps aux | grep -i $1 | grep -v grep | grep -v psf | awk '{FS="\t"; print 
> > $1 "\t" $2 "\t" $11}'
> > 
> > какво прави скриптът е очевидно - показва списъка на процесите с тази 
> > разлика, зе се появяват само ПИД, потребител и самата команда, 
> > стартирала процеса. Лошото е, че много често тази въпросна команда 
> > съдържа в себе си и интервали. Например ако съм стратирел нещо със sudo 
> > отпред, то това горното ще ми покаже само sudo, но не и командата 
> > по-нанатък. Мислех си, че трябва да сложа \t като разделител на awk (в 
> > първия опит просто го бях оставил на разделитяля по подразбиране), но 
> > пак не става, резултатът е същият.
> > 
> > Та как да кажа на авк да ми даде цялата команда? Демек, а оттук нататък 
> > ми дай всичко останало...
> 
> Мисля, че и с awk можеше да се направи, само че в момента не мога да се
> сетя точно как :(  Но можеш да се справиш малко по-добре с Perl, като го
> направиш 1. с една команда (а не с три grep-а), 2. без да показва самия
> процес, който търси това, което търсиш:
> 
> ps awwwfux | perl -ne 'next unless /rspawn/; split /\s+/; next if $_[0] == $$; print 
> join(" ", @_[10..$#_])."\n"'
> 
> Или, ако го искаш в малко по-чист вид, като отделно скриптче без
> hardcode-нат /rspawn/, погледни прикаченото pidof-pl :)

Е, разбира се, щеше да е малко по-хитро да го бях и прикачил наистина :)

Поздрави,
Петър

-- 
Peter Pentchev  [EMAIL PROTECTED]    [EMAIL PROTECTED]    [EMAIL PROTECTED]
PGP key:        http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint FDBA FD79 C26F 3C51 C95E  DF9E ED18 B68D 1619 4553
You have, of course, just begun reading the sentence that you have just finished 
reading.
#!/usr/bin/perl

my $cmd = shift;
if (!defined($pid = open(PIPE, "-|"))) {
        die("pipe: $!\n");
} elsif ($pid == 0) {
        exec("ps awwwfux");
        die("executing ps: $!\n");
}
while (<PIPE>) {
        next unless /$cmd/;
        split /\s+/;
        next if $_[1] == $$;
        print join("\t", $_[0], $_[1], join(" ", @_[10..$#_]))."\n"
}

Attachment: pgptUdN0Ku1VU.pgp
Description: PGP signature

  • lu... Nickolay Kolev
    • ... Peter Pentchev
      • ... Peter Pentchev
    • ... Tsvetin Vasilev
      • ... Nickolay Kolev
        • ... Tsvetin Vasilev
    • ... Огнян Кулев
      • ... Nickolay Kolev
        • ... Peter Pentchev
          • ... Nickolay Kolev
            • ... Tsvetin Vasilev
              • ... Nickolay Kolev
                • ... Tsvetin Vasilev

Reply via email to