• [^] # Re: man pidof

    Posté par . En réponse au message [Solved] [Optimisation] PHP/Bash tester le plus rapidement si un process est actif. Évalué à 1. Dernière modification le 18 mars 2019 à 16:30.

    Tu peux parser le nom du soft, par exemple dans /proc/*/cmdline sur tous les pid. Est-ce que pidoff ne ferait pas un truc comme ça?

    Hmmm, l'idée est très bonne mais il semble que l'utilisateur www-data ne puisse accéder à ces fichiers :

    [Mon Mar 18 16:22:50.620046 2019] [php7:error] [pid 14756] [client 192.168.42.42:43000] PHP Fatal error: Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/proc/tty/driver): failed to open dir: Permission denied in /var/www/html/test/test.php:14\nStack trace:\n#0 [internal function]: RecursiveDirectoryIterator->__construct('/proc/tty/drive...', 0)\n#1 /var/www/html/test/test.php(14): RecursiveDirectoryIterator->getChildren()\n#2 {main}\n thrown in /var/www/html/test/test.php on line 14
    

    Testé avec le code suivant :

    <?php
    $chkSoftwareName = array( "syncthing", "apache2" );
    $path="/proc/";
    $subfile="cmdline";
     if(is_array($chkSoftwareName)) {
     $checkOfAllSoft=true;
     foreach($chkSoftwareName as $softwareName){
     $checkOfThisSoft=false;
     $di = new RecursiveDirectoryIterator($path);
     $cpt = 0;
     $lenght = count(new RecursiveIteratorIterator($di));
     foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
     if(is_dir($filename.'/'.$subfile)){
     if(preg_match($softwareName, fgets($filename.'/'.$subfile))){
     echo $filename . '/' . $subfile . ' <br/>';
     $checkOfThisSoft=true;
     }
     }
     if ($cpt == $lenght - 1 && $checkOfThisSoft==false) {
     // last tab
     $checkOfAllSoft=false;
     }
     $cpt++;
     }
     }
     if(!$checkOfAllSoft) {
     echo "un des loulous n'est pas lancé !";
     }
     }
    ?>