¿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”?

Solutions Collecting From Web of "¿Cómo verificar si el PID especificado se está ejecutando actualmente sin invocar ps desde PHP?"

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... }