Here is the way I would do it, with IPC::Open3. If you add IO::Select into the mix, you can listen to multiple commands simultaneously ( shown in the second code block). Additionally, if you want a little graphic realtime, see linux memory leak monitor, where I do essentially what is shown below, but output it to a little Tk window in the bottom right corner of the screen.
#!/usr/bin/perl use warnings; use strict; use IPC::Open3; my $pid = $$; my $pid1 = open3(0, \*READ,0,"top -d 2 -b -p $pid "); #if \*ERROR is false, STDERR is sent to STDOUT while(1){ my @words = split(/\s+/,<READ>); $words[0] ||= 0; if($words[0] =~ /$pid/){print "$words[4] $words[9]\n"} #print "$words[0]\n"; } waitpid($pid, 1); # It is important to waitpid on your child process, # otherwise zombies could be created.
And for multiple command reading, throw them into a select loop.
#!/usr/bin/perl use warnings; use strict; use IPC::Open3; use IO::Select; my $pid = $$; my $pid1 = open3(0, \*READ,\*ERROR,"top -d 1 -b -p $pid "); #if \*ERROR is false, STDERR is sent to STDOUT # add more commands here if you want, but make sure the # filehandles are different. It would be an improvement to use # IO::Handle for the filehandles my $sel = new IO::Select(); $sel->add(\*READ); $sel->add(\*ERROR); my($error,$answer)=('',''); while(1){ foreach my $h ($sel->can_read){ my $buf = ''; if ($h eq \*ERROR){ sysread(ERROR,$buf,4096); if($buf){print "ERROR-> $buf\n"} }else{ sysread(READ,$buf,4096); if($buf){print "$buf\n"} } } }

I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku ................... flash japh

In reply to Re: Running 'top' command (of linux) for few minutes and then come out of system command (of perl) by zentara
in thread Running 'top' command (of linux) for few minutes and then come out of system command (of perl) by Striker

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.