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

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

Solutions Collecting From Web of "在Linux中检查一个进程是否使用PHP运行"

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

这是一个例子。

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

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

就像是:

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

你需要计算出你的服务器返回的内容是否正在运行。

祝你好运。

有很多方法来处理这个问题。 最简单的(直接回答你的问题)是获取'ps'的输出。

尽管Deamons总是创建一个“pid”文件。 该文件包含守护进程的进程ID。 如果你有这个,你可以检查文件的内容,看看这个ID的进程是否仍在运行。 这更可靠。

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

通过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); 

这是最好的方法

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

在上面的代码中,gs是我正在查看的进程