astroboy has asked for the wisdom of the Perl Monks concerning the following question:

Hi

I need to determine whether or not a a process (or processes) are running. My first instinct is to use Proc::ProcessTable, but there are installation problems. A few Perlers have provided patches, but they haven't been applied by the module author, and I don't want to fork a local version of this package. I also don't want to parse the output of 'ps' if possible, as I'd prefer a system-generic solution, a goal that Proc::ProcessTable aims to meet. Does anyone know of any other modules that serve my purpose?

  • Comment on Identifying whether a process is running

Replies are listed 'Best First'.
Re: Identifying whether a process is running
by snoopy (Curate) on Nov 09, 2009 at 23:15 UTC
    If you already know the process id(s), and own the processes, the kill builtin function might be of use.

    From the doco:

       kill SIGNAL, LIST
       .... 
            $cnt = kill 1, $child1, $child2
            kill 9, @goners;
    
        If SIGNAL is zero, no signal is sent to the process, but the
        kill(2) system call will check whether it's possible to send
        a signal to it (that means, to be brief, that the process is
        owned by the same user, or we are the super user).  This is
        a useful way to check that a child process is alive.
    
      Alas, this didn't work for me. I'm trying to see from a web page whether a daemon that should be running as root is actually there. The apache user can't issue a kill 0 to root's process (well it can, but it doesn't report the result correctly)
Re: Identifying whether a process is running
by BioLion (Curate) on Nov 10, 2009 at 11:57 UTC

    I recommended Parallel::Forker to someone else recently, and they had a similar problem ( how to kill deattached process ). Parallel::Forker has a poll method which should allow you to service any processes you have launched. Admittedly this doesn't work if you want to manipulate *any* process on the machine, but maybe it will help you...

    Just a something something...
      Thanks, but it's no what I'm after. I don't launch the process - I just want to see if it exists