Checking if process still running? Checking if process still running? linux linux

Checking if process still running?


If you're doing it in php, why not use php code:

In the running program:

define('PIDFILE', '/var/run/myfile.pid');file_put_contents(PIDFILE, posix_getpid());function removePidFile() {    unlink(PIDFILE);}register_shutdown_function('removePidFile');   

Then, in the watchdog program, all you need to do is:

function isProcessRunning($pidFile = '/var/run/myfile.pid') {    if (!file_exists($pidFile) || !is_file($pidFile)) return false;    $pid = file_get_contents($pidFile);    return posix_kill($pid, 0);}

Basically, posix_kill has a special signal 0 that doesn't actually send a signal to the process, but it does check to see if a signal can be sent (the process is actually running).

And yes, I do use this quite often when I need long running (or at least watchable) php processes. Typically I write init scripts to start the PHP program, and then have a cron watchdog to check hourly to see if it's running (and if not restart it)...


I'd use pgrep to do this (caution, untested code):

exec("pgrep lighttpd", $pids);if(empty($pids)) {    // lighttpd is not running!}

I have a bash script that does something similar (but with SSH tunnels):

#!/bin/shMYSQL_TUNNEL="ssh -f -N -L 33060:127.0.0.1:3306 tunnel@db"RSYNC_TUNNEL="ssh -f -N -L 8730:127.0.0.1:873 tunnel@db"# MYSQLif [ -z `pgrep -f -x "$MYSQL_TUNNEL"` ] then    echo Creating tunnel for MySQL.    $MYSQL_TUNNELfi# RSYNCif [ -z `pgrep -f -x "$RSYNC_TUNNEL"` ]then    echo Creating tunnel for rsync.    $RSYNC_TUNNELfi

You could alter this script with the commands that you want to monitor.


You can try this, which combines bits of those two approaches:

function processExists($processName) {    $exists= false;    exec("ps -A | grep -i $processName | grep -v grep", $pids);    if (count($pids) > 0) {        $exists = true;    }    return $exists;}

If that doesn't work, you may want to just try running the ps command on your system and seeing what output it gives.