¿Cómo verificar si el PID especificado se está ejecutando actualmente sin invocar ps desde PHP?

Nos gustaría comprobar si un proceso específico se está ejecutando actualmente a través de PHP.

Nos gustaría simplemente suministrar un PID y ver si se está ejecutando actualmente o no.

¿PHP tiene una función interna que nos da esta información o tenemos que analizarla de salida “ps”?

Si estás en Linux, prueba esto:

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

posix_getpgid($pid); devolverá falso cuando un proceso no se está ejecutando

Si quieres tener una función para ella, entonces:

 $running = posix_kill($pid,0); 

Envíe la señal sig al proceso con el identificador de proceso pid.

Llamar a posix_kill con la señal de 0 kill devolverá true si el proceso se está ejecutando, de lo contrario será false .

shell_exec un script bash usando shell_exec

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

Creo que posix_kill(posix_getpgrp(), 0) es la mejor manera de comprobar si PID se está ejecutando, solo que no está disponible en las plataformas de Windows.

Es lo mismo kill -0 PID en shell, y shell_exec('kill -0 PID') en PHP pero NO ERROR cuando pid no existe.

En el proceso hijo bifurcado, posix_getpgid devuelve el pid del padre siempre incluso si el padre fue terminado.

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

He hecho un script para esto, que estoy usando en wordpress para mostrar el estado del servidor de juegos, pero esto funcionará con todo el proceso en ejecución en el servidor

 < ?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: RUNNING
"; } else { echo "$string: DOWN
"; } } } //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"); ?>
 //For Linux $pid='475678'; exec('ps -C php -o pid', $a); if(in_array($pid, $a)){ // do something... }