Користувальницькькі налаштування

Налаштування сайту


Сайдбар

Розділи

Загальний опис
Історія змін
Рекомендації до оновлення
Плани на майбутнє
Відомі проблеми
Онлайн демо
Допомога проекту
Люди
Трохи про безпеку

FAQ



Редагувати сайдбар

stardust

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
)

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

  • start - час початку роботи процесу в вигляді unix timestamp (int)
  • end - час завершення роботи процесу в вигляді unix timestamp. 0 - якщо виконання ще не завершено. (int)
  • realtime - реальний час виконання процесу, динамічно змінюється, якщо він ще виконується. В секундах. (float)
  • ms - час початку виконання процесу з мікросекундами. 0 - якщо триває зараз. (float)
  • me - час завершення виконання процесу з мікросекундами. 0 - якщо ще триває. (float)
  • finished - стан завершеності виконання процесу. 1 - завершено, 0 - триває зараз. (int)
  • pid - системний PID процесу в рамках якого було виконано процес, що менеджився StarDust.

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

$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 немає можливості визначити постфактум, що там з тим процесом відбуватиметься.

stardust.txt · Востаннє змінено: 2023/01/21 18:23 повз nightfly