StarDust - менеджер процесів

Слугує для відслідковування виконання процесів, що можуть відбуватись в окремих потоках.

Використання надпросте. Наприклад, коли нам треба дізнатись “а чи не виконується десь в сусідньому потоці якийсь процес?” задля того, аби забезпечити його монопольність та уникнути race condition.

    $pid = new StarDust('SOMEPROCESS');
    if ($pid->isRunning()) {
        show_warning(__('This process is already running'));
    } else {
        show_info(__('Process not running, starting it!'));
        $pid->start();
        //here we can run any part of code
        sleep(10);
        $pid->stop();
        show_success(__('Process execution finished'));
    }

ну або ж в зворотній бік перевіряючи його на notRunning

    $pid = new StarDust('SOMEPROCESS');
    if ($pid->notRunning()) {
        show_info(__('Process not running now'));
    } else {
        show_warning(__('This process is already running'));
    }

Також нам може захотітись взнати, як проходить виконання цього процесу зараз:

$processState=$pid->getState();
debarr($processState);
Array
(
    [start] => 1661962409
    [end] => 1661962419
    [realtime] => 10.00102
    [ms] => 1661962409.718
    [me] => 1661962419.719
    [finished] => 1
    [pid] => 42847
)

Що це за значення?

та можливо визначити, які взагалі процеси там відбуваються чи відбувались і який в них поточний стан?

$allProcessStates=$pid->getAllStates();
debarr($allProcessStates);
Array
(
    [PROCESS1] => Array
        (
            [start] => 1661961554
            [end] => 1661961584
            [realtime] => 30.00125
            [ms] => 1661961554.6937
            [me] => 1661961584.6949
            [finished] => 1
            [pid] => 52597
        )

    [PROCESS2] => Array
        (
            [start] => 1661961672
            [end] => 1661961702
            [realtime] => 30.00151
            [ms] => 1661961672.1594
            [me] => 1661961702.1609
            [finished] => 1
            [pid] => 24597
        )

    [SOMEPROCESS] => Array
        (
            [start] => 1661962409
            [end] => 1661962419
            [realtime] => 10.00102
            [ms] => 1661962409.718
            [me] => 1661962419.719
            [finished] => 1
            [pid] => 54597
        )
        
    [ANOTHERPROCESS] => Array
        (
            [start] => 1661983067
            [end] => 0
            [realtime] => 0.00055
            [ms] => 1661983067.186
            [me] => 0
            [finished] => 0
            [pid] => 28737
        )

)

Також ми можемо, динамічно перемикати імена процесів (читаємо ідентифікатори) на ходу, для екземпляру StarDust за допомогою сеттера setProcess

    $processManager = new StarDust();
    $processManager->setProcess('SOMEPROCESSNAME');
    $processState=$processManager->getState();
    $processManager->setProcess('ANOTHERPROCESS');
    $anotherState=$processManager->getState();

Починаючи з Ubilling 1.3.5 на StarDust також покладено функціонал запуску фонових процесів. Реалізовано це за допомогою наступного методу:

public function runBackgroundProcess(string $command, [integer $timeout = 0] )

runBackgroundProcess власне що тільки запускає процес в фоні, та забуває про нього. Ні, цей метод, не контролює його перебігу. Тому в нормі start() та stop() процес має робити самостійно всередині самого себе, оскільки у StarDust немає можливості визначити постфактум, що там з тим процесом відбуватиметься.