Слугує для відслідковування виконання процесів, що можуть відбуватись в окремих потоках.
Використання надпросте. Наприклад, коли нам треба дізнатись “а чи не виконується десь в сусідньому потоці якийсь процес?” задля того, аби забезпечити його монопольність та уникнути 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 немає можливості визначити постфактум, що там з тим процесом відбуватиметься.