You could do something like "ps ax | grep tail" and get the first field of the resulting line (not sure what the best tool is for that, probably something like cut)

From: Daniel Fone <[EMAIL PROTECTED]>
Reply-To: [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Subject: Bash scripting
Date: Wed, 29 Oct 2003 10:03:31 +1300

Hi guys,

I was wondering if anyone could help me out with this...
I have a bash script, which generates a command like so:
CMD="tail -f /var/log/messages | /usr/bin/perl -n /tmp/sentry_1.pl"

Good so far. I need to execute this command asyncronosly (eg in the
background). So I run eval "$CMD &" which works fine. The commands get
"forked" so that ps -afx returns:
3272 pts/0    S      0:00 tail -f /var/log/messages.2
3273 pts/0    S      0:00 /usr/bin/perl -n /tmp/sentry_1.pl

The tricky part is that I need to store the PID of the command so I can kill
it later. The $! variable is great but it only contains the pid of the perl
script (eg 3273) which, when killed, leaves the tail alive! Is there anyway I
can get the pid of the tail?


I thought an alternative would be to run "sh -c $CMD &" which also works and
gives us:
3648 pts/0 S 0:00 sh -c [...] | /usr/bin/perl -n /tmp/sentry_1.pl
3651 pts/0 S 0:00 \_ tail -f /var/log/messages.2
3652 pts/0 S 0:00 \_ /usr/bin/perl -n /tmp/sentry_1.pl
However, when I kill the sh process, both the tail and the perl remain
running.


Any ideas?

Daniel


_________________________________________________________________
Need more speed? Get Xtra Jetstream @ http://www.xtra.co.nz/products/0,,5803,00.html !




Reply via email to