it-swarm.com.de

Wie kann man überprüfen, ob die angegebene PID derzeit ausgeführt wird, ohne ps von PHP aufzurufen?

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?

31
anonymous-one

Wenn Sie mit Linux arbeiten, versuchen Sie Folgendes:

if (file_exists( "/proc/$pid" )){
    //process with a pid = $pid is running
}
66
Nasreddine

posix_getpgid($pid); gibt false zurück, wenn ein Prozess nicht ausgeführt wird

34

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.

14
Steel Brain

Ich würde ein Bash-Skript mit Shell_exec aufrufen.

$pid = 23818;
if (Shell_exec("ps aux | grep " . $pid . " | wc -l") > 0)
{
    // do something
}
3
Pierre-Olivier

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");
}
1
consatan

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

0
Sven Lauber

So machen wir es:

if (`ps -p {$pid} -o comm,args=ARGS | grep php`) {

  //process with pid=$pid is running;
}
0
Denis Matafonov
$pid = 12345;
if (Shell_exec("ps ax | grep " . $pid . " | grep -v grep | wc -l") > 0)
{
    // do something
}
0
Leonid Zakharov
//For Linux
$pid='475678';
exec('ps -C php -o pid', $a);
if(in_array($pid, $a)){
    // do something...
}
0