Nous aimerions vérifier si un processus spécifié est en cours d'exécution via PHP.
Nous aimerions simplement fournir un PID et voir si celui-ci est en cours d'exécution ou non.
Est-ce que PHP a une fonction interne qui nous donnerait cette information ou devons-nous l'analyser à partir de la sortie "ps"?
Si vous êtes sur Linux, essayez ceci:
if (file_exists( "/proc/$pid" )){
//process with a pid = $pid is running
}
posix_getpgid($pid);
retournera false lorsqu'un processus n'est pas en cours d'exécution
Si vous voulez avoir une fonction pour cela alors:
$running = posix_kill($pid,0);
Envoyez le signal au processus avec l'identifiant de processus pid.
Appeler posix_kill
avec le signal de suppression 0 renverra true
si le processus est en cours d'exécution, false
sinon.
J'appellerais un script bash en utilisant Shell_exec
$pid = 23818;
if (Shell_exec("ps aux | grep " . $pid . " | wc -l") > 0)
{
// do something
}
Je pense que posix_kill(posix_getpgrp(), 0)
est le meilleur moyen de vérifier si le PID est en cours d’exécution, il est uniquement disponible sur les plates-formes Windows.
Il en va de même pour kill -0 PID
sur le shell et Shell_exec('kill -0 PID')
sur PHP, mais la sortie NO ERROR lorsque pid n'existe pas.
Dans le processus fils forké, le posix_getpgid
renvoie toujours le pid du parent, même si le parent a été résilié.
<?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");
}
j'ai fait un script pour cela, lequel im utilise WordPress pour afficher l'état du serveur de jeu, mais cela fonctionnera avec tous les processus en cours
<?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");
?>
plus d'informations ici http://umbru.ch/?p=328
Voici comment nous le faisons:
if (`ps -p {$pid} -o comm,args=ARGS | grep php`) {
//process with pid=$pid is running;
}
//For Linux
$pid='475678';
exec('ps -C php -o pid', $a);
if(in_array($pid, $a)){
// do something...
}