我们想检查当前是否通过PHP运行指定的进程。
我们想简单地提供一个PID并查看它当前是否正在执行。
PHP是否有内部函数可以提供这些信息,还是我们必须从“ps”输出中解析它?
答案 0 :(得分:67)
如果您使用的是Linux,请尝试以下操作:
if (file_exists( "/proc/$pid" )){
//process with a pid = $pid is running
}
答案 1 :(得分:36)
posix_getpgid($pid);
将返回false
答案 2 :(得分:14)
如果你想拥有它的功能,那么:
$running = posix_kill($pid,0);
使用进程标识符pid将信号sig发送到进程。
如果进程正在运行,则使用0 kill信号调用posix_kill
将返回true
,否则将返回false
。
答案 3 :(得分:3)
我会使用shell_exec
$pid = 23818;
if (shell_exec("ps aux | grep " . $pid . " | wc -l") > 0)
{
// do something
}
答案 4 :(得分:1)
我认为posix_kill(posix_getpgrp(), 0)
是检查PID是否正在运行的最佳方法,它仅在Windows平台上不可用。
它与shell上的kill -0 PID
相同,而PHP上的shell_exec('kill -0 PID')
相同,但当pid不存在时,NO ERROR输出也是如此。
在分叉子进程中,即使父进程被终止,posix_getpgid
也会返回父进程的pid。
<?php
$pid = pcntl_fork();
if ($pid === -1) {
exit(-1);
} elseif ($pid === 0) {
echo "in child\n";
while (true) {
$pid = posix_getpid();
$pgid = posix_getpgid($pid);
echo "pid: $pid\tpgid: $pgid\n";
sleep(5);
}
} else {
$pid = posix_getpid();
echo "parent process pid: $pid\n";
exit("parent process exit.\n");
}
答案 5 :(得分:0)
我已经为此完成了一个脚本,我在wordpress中使用它来显示游戏服务器状态,但这将适用于服务器上的所有正在运行的进程
<?php
//##########################################
// desc: Diese PHP Script zeig euch ob ein Prozess läuft oder nicht
// autor: seevenup
// version: 0.2
//##########################################
if (!function_exists('server_status')) {
function server_status($string,$name) {
$pid=exec("pidof $name");
exec("ps -p $pid", $output);
if (count($output) > 1) {
echo "$string: <font color='green'><b>RUNNING</b></font><br>";
}
else {
echo "$string: <font color='red'><b>DOWN</b></font><br>";
}
}
}
//Beispiel "Text zum anzeigen", "Prozess Name auf dem Server"
server_status("Running With Rifles","rwr_server");
server_status("Starbound","starbound_server");
server_status("Minecraft","minecarf");
?>
&#13;
此处提供更多信息http://umbru.ch/?p=328
答案 6 :(得分:0)
//For Linux
$pid='475678';
exec('ps -C php -o pid', $a);
if(in_array($pid, $a)){
// do something...
}
答案 7 :(得分:0)
以下是我们的工作方式:
if (`ps -p {$pid} -o comm,args=ARGS | grep php`) {
//process with pid=$pid is running;
}
答案 8 :(得分:0)
$pid = 12345;
if (shell_exec("ps ax | grep " . $pid . " | grep -v grep | wc -l") > 0)
{
// do something
}