This website uses Cookies to provide you with the best possible service. Please see our Privacy Policy for more information. Click the check box below to accept cookies. Then confirm with a click on "Save".  
Status: 2025-02-16

Process


callRoute

calls a Route non-blocking

/** @var int $iPid */
$iPid = Process::callRoute('/404/');
  • calls a Route non-blocking
  • saves the (int) id of the process (the pid) into the pid file folder
  • returns the (int) id of the process (the pid)

$iPid

// type: int
12345

Events

  • mvc.process.callRoute.before; containing the route $sRoute
  • mvc.process.callRoute.after; containing array('sRoute' => $sRoute, 'iPid' => $iPid)

isRunning

checks whether a process identified by its process id is running

/** @var boolean $bIsRunning */
$bIsRunning = Process::isRunning(12345);

$bIsRunning

// type: boolean
true

reportOnPid

get a report on processes

// default
echo nl2br(
  Process::reportOnPid()
);

// with modified symbols
echo nl2br(
  Process::reportOnPid(
    sRunningSymbol: '<i class="fa fa-gear text-success"></i>',
    sZombieSymbol: '<i class="fa fa-skull-crossbones text-danger"></i>'
  )
);

echo output

⚙ Running: 274196 since 2025-01-03 10:03:47
⚙ Running: 274198 since 2025-01-03 10:03:47
⚙ Running: 274200 since 2025-01-03 10:03:47
️️☠️ Zombie: 274202 since 2025-01-03 10:01:00

getPidFileFolder

returns the absolute path to the pid file folder

/** @var string $sPidFileFolder */
$sPidFileFolder = Process::getPidFileFolder();

$sPidFileFolder

// type: string
'/var/www/html/application/pid/'

getAmountProcessesMax

returns the maximum number of all job processes allowed

/** @var int $iMaxProcesses */
$iMaxProcesses = Process::getAmountProcessesMax();

$iMaxProcesses

// type: integer
30

getAmountProcessesRecorded

detect running processes (=== amount of current pidfiles in pid file folder)

/** @var int $iAmount */
$iAmount = Process::getAmountProcessesRecorded();

$iAmount

// type: integer
2

getAmountProcessesAvailable

returns the amount of available processes

/** @var int $iAmount */
$iAmount = Process::getAmountProcessesAvailable();

$iAmount

// type: integer
28

savePid

saves pid from getmypid() as a file into the pid file folder

/** @var boolean $bSave */
$bSave = Process::savePid();

saves the given pid as a file into the pid file folder

/** @var boolean $bSave */
$bSave = Process::savePid(iPid: 12345);

saves the given pid as a file into the pid file folder, plus the pid file contains the argument $mContent JSON encoded

/** @var boolean $bSave */
$bSave = Process::savePid(
    iPid: 12345, 
    mContent: array(
        'foo' => 'bar'
    ) 
);

$bSave

// type: boolean
true

hasPidFile

checks whether there exists a pid file in the pid file folder relating to the current pid

/** @var boolean $bHasPidFile */
$bHasPidFile = Process::hasPidFile();
  • if no pid ist given, the current pid from getmypid() is automatically taken

checks whether there exists a pid file in the pid file folder relating to the given pid

/** @var boolean $bHasPidFile */
$bHasPidFile = Process::hasPidFile(12345);

$bHasPidFile

// type: boolean
true

deletePidFile

deletes pid file in the pid file folder relating to the current pid

/** @var boolean $bDelete */
$bDelete = Process::deletePidFile();
  • if no pid ist given, the current pid from getmypid() is automatically taken

deletes pid file in the pid file folder relating to the given pid

/** @var boolean $bDelete */
$bDelete = Process::deletePidFile(12345);

$bDelete

// type: boolean
true

getRunningPidFileArray

returns array with absolute path to running pidfiles

/** @var array $aRunning */
$aRunning = Process::getRunningPidFileArray();

$aRunning

// type: array, items: 1
[
    0 => '/var/www/html/application/pid/1841',
]

getZombiePidFileArray

returns detected real zombies as array containing absolute path to zombie pidfiles

/** @var array $aZombie */
$aZombie = Process::getZombiePidFileArray();

$aZombie

// type: array, items: 0
[
]

deleteZombieFiles

deletes all zombie pid files

Process::deleteZombieFiles();

Event

  • mvc.process.deleteZombieFiles.after; containing the deleted pid file $sPidFile

destruct

this method is called at each event that matches the pattern *.controller.*.__destruct. See Process Event Listener

deletes pid-files on shutdown

Process::destruct();

Event

  • mvc.process.destruct.after; containing the process id (the pid) of the ended process in $iPid

Process config

the queue main config resides in config/_mvc.php. Override to your needs in your module's config files.

config

MVC_PROCESS: {

    // Maximum number of all job processes allowed in parallel
    $aConfig['MVC_PROCESS_MAX_PROCESSES_OVERALL'] = 30;

    // pidFiles directory
    $aConfig['MVC_PROCESS_PID_FILE_DIR'] = $aConfig['MVC_APPLICATION_PATH'] . '/pid/';
}

Process Event Listener

modules/Foo/etc/event/process.php

<?php

\MVC\Event::processBindConfigStack([

    /*
     * Events for which the process destructor should be called
     * '*.controller.*.__destruct',
     */
    '*.__destruct' => [
        function() {
            \MVC\Process::destruct();
        }
    ],
    'mvc.process.callRoute.before' => [
        function (string $sRoute) {
//            \MVC\Log::write($sRoute, \MVC\Config::get_MVC_LOG_FILE_PROCESS());
        },
    ],
    'mvc.process.callRoute.after' => [
        function (array $aInfo) {
            \MVC\Log::write(json_encode($aInfo), \MVC\Config::get_MVC_LOG_FILE_PROCESS());
        },
    ],
    'mvc.process.deleteZombieFiles.after' => [
        function (string $sPidFile) {
            \MVC\Log::write('pidfile: ' . $sPidFile . "\tDELETE ZOMBIE", \MVC\Config::get_MVC_LOG_FILE_PROCESS());
        },
    ],
    'mvc.process.destruct.after' => [
        function (int $iPid) {
            \MVC\Log::write('pid: ' . $iPid . "\tDELETE", \MVC\Config::get_MVC_LOG_FILE_PROCESS());
        },
    ],
]);