Wir möchten prüfen, ob ein bestimmter Prozess gerade über PHP läuft.
Wir möchten einfach eine PID angeben und sehen, ob sie gerade ausgeführt wird oder nicht.
Hat PHP eine interne Funktion, die uns diese Informationen geben würde, oder müssen wir sie aus der "ps" -Ausgabe heraus analysieren?
Wenn Sie mit Linux arbeiten, versuchen Sie Folgendes:
if (file_exists( "/proc/$pid" )){
//process with a pid = $pid is running
}
posix_getpgid($pid);
gibt false zurück, wenn ein Prozess nicht ausgeführt wird
Wenn Sie eine Funktion dafür haben wollen:
$running = posix_kill($pid,0);
Senden Sie das Signal sig mit der Prozesskennung pid an den Prozess.
Der Aufruf von posix_kill
mit dem Kill-Signal 0 gibt true
zurück, wenn der Prozess ausgeführt wird, andernfalls false
.
Ich würde ein Bash-Skript mit Shell_exec
aufrufen.
$pid = 23818;
if (Shell_exec("ps aux | grep " . $pid . " | wc -l") > 0)
{
// do something
}
Ich denke, posix_kill(posix_getpgrp(), 0)
ist der beste Weg, um zu überprüfen, ob PID ausgeführt wird. Es ist nur auf Windows-Plattformen nicht verfügbar.
Es ist das Gleiche wie kill -0 PID
in der Shell und Shell_exec('kill -0 PID')
in PHP, aber KEINE ERROR-Ausgabe, wenn pid nicht existiert.
Im verzweigten untergeordneten Prozess gibt die posix_getpgid
-PID des übergeordneten Elements immer zurück, auch wenn das übergeordnete Element beendet wurde.
<?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");
}
ich habe ein Skript dafür erstellt, das ich in WordPress zum Anzeigen des Game-Server-Status verwendet. Dies funktioniert jedoch mit allen laufenden Prozessen auf dem Server
<?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");
?>
weitere Informationen hier http://umbru.ch/?p=328
So machen wir es:
if (`ps -p {$pid} -o comm,args=ARGS | grep php`) {
//process with pid=$pid is running;
}
$pid = 12345;
if (Shell_exec("ps ax | grep " . $pid . " | grep -v grep | wc -l") > 0)
{
// do something
}
//For Linux
$pid='475678';
exec('ps -C php -o pid', $a);
if(in_array($pid, $a)){
// do something...
}