Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Nov 2006 17:14:35 -0600
From:      Dan Nelson <dnelson@allantgroup.com>
To:        jhall@vandaliamo.net
Cc:        freebsd-questions@freebsd.org
Subject:   Re: Checking processes without PIDs
Message-ID:  <20061127231435.GA69797@dan.emsphone.com>
In-Reply-To: <2437.65.117.48.155.1164666185.squirrel@admintool.trueband.net>
References:  <2365.65.117.48.155.1164660366.squirrel@admintool.trueband.net> <20061127212948.GL29363@dan.emsphone.com> <2437.65.117.48.155.1164666185.squirrel@admintool.trueband.net>

next in thread | previous in thread | raw e-mail | index | archive | help
In the last episode (Nov 27), jhall@vandaliamo.net said:
> > In the last episode (Nov 27), jhall@vandaliamo.net said:
> >> I have written a script to determine if processes are running.  I am
> >> using, as an example,
> >>
> >> ps -ax | grep -c postgrey
> >>
> >> Ocassionally, I am receiving a notification a process is not running
> >> (and it varies which process I receive notifications for).  And, when
> >> checking, the process actually is running.
> >>
> >> Is there a better way to determine if a process is running than using ps
> >> and grep?
> >
> > Reading the program's pidfile and checking to see if that pid still
> > exists is the best way.  That only works if your program generates a
> > pidfile, though.  Most of the time they're in /var/run or a
> > subdirectory.  If it doesn't generate a pidfile, you can try the pgrep
> > command, which is better than a "ps|grep" combo because it won't ever
> > accidentally match itself.
> >
> 
> Yes, that works much better for most of the processes I am testing
> against!  Two are still giving me problems since their command line
> has (perl) listed at the end. Any suggestions on how to better deal
> with these two?
> 
> They display as follows
> 
>   422  ??  Ss     8:04.49 /home/postgrey/postgrey --inet=10023 --greylist-text=Greylisted, see http://www.mnea.org/greylisted.html -d (perl)

You'll probably need to use the -f option to pgrep to match against the
full commandline instead of just the process name:

  pgrep -f "/home/postgrey/postgrey --inet=10023"

I added the first argument to the search string, because if you just
use "/home/postgrey/postgrey", then commands like "less
/home/postgrey/postgrey" would match.

A quick web search indicates that postgrey supports a --pidfile option,
so you might want to use that.  In fact, the startup script installed
by the FreeBSD port seems to include it, so I'm not sure why it's not
in your ps output there.

-- 
	Dan Nelson
	dnelson@allantgroup.com



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20061127231435.GA69797>