在Linux中使用PHP检查进程是否正在运行

时间:2011-06-19 16:06:23

标签: php linux daemon kannel

我正在使用 kannel 通过PHP发送短信。我想知道如何检查特定进程是否正在运行。要运行 kannel ,名为bearerbox的进程应始终运行。我想检查此进程是否正在运行。因为如果进程没有运行,那么将向我发送一封邮件通知我。

5 个答案:

答案 0 :(得分:25)

最简单的方法是使用pgrep,如果进程存在则退出代码为0,否则为1。

这是一个例子。

exec("pgrep bearerbox", $output, $return);
if ($return == 0) {
    echo "Ok, process is running\n";
}

答案 1 :(得分:5)

您可以使用exec命令查找您的流程,然后采取相应的行动。

类似的东西:

exec('ps aux | grep bearerbox', $output);

您需要弄清楚服务器上返回的内容,以确定它是否正在运行。

祝你好运。

答案 2 :(得分:4)

有很多方法可以解决这个问题。最容易(并且直接回答你的问题)是获取'ps'的输出。

Deamons往往总是创建一个'pid'文件。该文件包含守护程序的进程ID。如果您有,那么您可以检查文件的内容,看看具有该ID的进程是否仍在运行。这更可靠。

supervisord也可能具有此功能。最后,也许最好是建立一个真正的监控系统而不是自己构建一些东西。 Nagios可能是一个不错的选择,但可能还有其他人。

答案 3 :(得分:2)

通过PHP监控流程的简单而方便的解决方案:PHP-Linux-Process-Monitor

代码目标如:

$ps = explode("\n", trim(shell_exec('ps axo pid,ppid,%cpu,pmem,user,group,args --sort %cpu')));
foreach($ps AS $process){
$processes[]=preg_split('@\s+@', trim($process), 7 );
}
$head= array_shift($processes);
$processes = array_reverse($processes);
$output='';
foreach ($head AS $f) $output.="<td class=\"head\">$f</td>";
$output=sprintf('<tr class="head">%s</tr>',$output);
foreach($processes AS $p){
    $output.='<tr>';
    foreach ($p AS $i=>$f){
        if($i==0) $output.=sprintf('<td>%1$s</td>',$f);
        elseif($i==2) $output.=sprintf('<td class="cpu">%1$s<ins style="width:%1$s%%"></ins></td>',$f);
        elseif($i==3) $output.=sprintf('<td class="mem">%1$s<ins style="width="%1$s%%"></ins></td>',$f);
        elseif($i == 6) $output.=sprintf('<td class="command">%1$s</td>',$f);
        else $output.=sprintf('<td>%1$s</td>',$f);
    }
    $output.='</tr>';
}
$cpu=implode('&nbsp;&nbsp;&nbsp;', sys_getloadavg());
$output=sprintf('<table data-cpu="%s" id="process">%s</table>',$cpu, $output);

答案 4 :(得分:0)

这是最好的方法

<?php
exec("ps -eo comm,pid | awk '$1 == "."\"gs\""." { print $2 }'", $output);
if ($output != 0) {
    echo "The process gs is running\n";
}
?>

在上面的代码中gs是我正在检查的过程